为什么我的动能js碰撞/交叉alg。太慢了

时间:2013-07-08 15:57:48

标签: canvas kineticjs collision intersection

抱歉我的英语不好!

我有2个关于Kinetic JS和Intersections的问题。

  1. 正如您在我的代码示例中所看到的,即使只有10个节点,Intersection方法也非常慢。那是为什么?

    http://jsfiddle.net/Maj0rrush/YWGzE/8/

  2. 在交叉路口,我需要销毁两个节点,但第84和85行会引发错误!

    0x800a138f - Laufzeitfehler in JavaScript: Die Eigenschaft "hitCanvas" eines undefinierten oder Nullverweises kann nicht abgerufen werden.

1 个答案:

答案 0 :(得分:4)

  1. 直接从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

  2. 您收到该错误是因为O(n^2)方法需要intersects(pos)形式的点对象,您传递的内容是错误的。

    这是错的: {x: newX, y: newY}

    这是对的:intersects(newX, newY)

相关问题