抱歉我的英语不好!
我有2个关于Kinetic JS和Intersections的问题。
正如您在我的代码示例中所看到的,即使只有10个节点,Intersection方法也非常慢。那是为什么?
在交叉路口,我需要销毁两个节点,但第84和85行会引发错误!
0x800a138f - Laufzeitfehler in JavaScript: Die Eigenschaft "hitCanvas" eines undefinierten oder Nullverweises kann nicht abgerufen werden.
答案 0 :(得分:4)
直接从KineticJS文档中获取:
<强>
intersects(point)
强> 确定点是否在形状中,无论其他形状是否在其上。注意:因为此方法清除临时画布然后重绘形状,如果连续执行多次,它的执行效果非常差。请尽可能使用Kinetic.Stage#getIntersection方法,因为它的效果要好得多
话虽如此,在所有形状的双重 intersects(pos)
循环中每100毫秒调用for each
将会对性能产生非常大的影响{{1} }。随着您拥有的对象越多,速度将呈指数级增长,因此10个节点已经在减慢您的应用程序速度!
你最好在这里创建自己的碰撞检测算法,以提高碰撞检测的性能,因为看起来你需要经常检测碰撞(在这个例子中,每100毫秒)。因为您正在检测点(圆圈)之间的碰撞,所以我建议您查看边界圆碰撞算法。请访问此网站了解详情:http://www.gamefromscratch.com/post/2012/12/12/GameDev-math-recipes-Collision-detection-using-bounding-circles.aspx
您收到该错误是因为O(n^2)
方法需要intersects(pos)
形式的点对象,您传递的内容是错误的。
这是错的:
{x: newX, y: newY}
这是对的:intersects(newX, newY)