0

对不起,我的英语不好!

我有 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.

4

1 回答 1

4
  1. 直接取自 KineticJS 文档:

    intersects(point) 确定点是否在形状中,无论其他形状是否位于其顶部。注意:由于此方法会清除临时画布,然后重新绘制形状,因此如果连续执行多次,它的性能会很差。请尽可能使用Kinetic.Stage#getIntersection方法,因为它的性能要好得多

    话虽如此,intersects(pos)在双for each循环中对所有形状每 100 毫秒调用一次将对性能产生非常严重的影响O(n^2)。随着您拥有的对象越多,速度将呈指数增长,因此 10 个节点已经在拖慢您的应用程序!

    您最好在这里创建自己的碰撞检测算法以提高碰撞检测的性能,因为看起来您需要非常频繁地检测碰撞(在此示例中,每 100 毫秒)。因为您正在检测点(圆)之间的碰撞,所以我建议您研究边界圆碰撞算法。查看此站点以获取更多信息:http ://www.gamefromscratch.com/post/2012/12/12/GameDev-math-recipes-Collision-detection-using-bounding-circles.aspx

  2. 您收到该错误是因为该intersects(pos)方法需要一个 形式的点对象{x: newX, y: newY},您传递的内容是错误的。

    这是错误的: intersects(newX, newY)

    这是正确的:intersects({x:newX, y:newY})

于 2013-07-08T17:55:51.837 回答