KineticJS Container.getIntersections非常慢

时间:2012-11-29 17:01:33

标签: canvas collision-detection kineticjs intersection

我需要检测HTML5画布中的碰撞(我正在使用KineticJS库),到目前为止,我已经使用自己的方法来检测某个点是否在某个形状内。

我最近注意到有一个来自Container类的方法,getIntersections(point)应该完全符合我的要求。但是它似乎非常慢,所以当在画布上移动一个对象并对每个新位置使用该方法时,它变得无法使用。

有没有人用这种方法进行碰撞检测?如果没有,HTML5画布中是否有关于碰撞检测的提示?我无法检测点是否在旋转了一定度数的矩形内。

3 个答案:

答案 0 :(得分:1)

我注意到同样的事情,getIntersections需要很长时间。它也被称为鼠标事件等,这使它更糟糕。

我不知道如何让它更快,但影响速度的一件事就是你舞台上的形状数量。因此,加快速度的一种方法是在不需要时删除不必要的Shapes,并在需要时动态恢复它们。

答案 1 :(得分:1)

我在移动游戏中使用了getIntersection()(用于空中交通管制的模拟)并且它运行得非常好,因为它被多次调用以检测游戏框架中所有现有平面之间的碰撞。如果您只需检测一个特定点,可能的解决方案可能是为该位置添加一个非常小的虚拟矩形,并获取与其相交的所有对象的列表并迭代此列表。命名感兴趣的对象可以加快您的条件验证。

答案 2 :(得分:1)

https://github.com/ericdrowell/KineticJS/issues/150

这正是您所需要的。

  

好的,要清楚,有两种方法可以获得相交的形状   基于鼠标位置:

     

1)getIntersection() - 首选2)getIntersections() - 非常慢,   并应用于特殊情况

     

getIntersection()方法非常快,并返回一个对象   包含有关交叉点的信息,例如   参考KineticJS形状(如果有)或像素颜色   信息。

     

getIntersections()方法做了同样的事情,除了它   迭代并按顺序重绘阶段中的每个节点   返回可能已分层的交叉点集合   彼此之上。

     100次中有99次,你可能只对可见光感兴趣   交叉节点位于其下方节点的顶部。

     

我实际上考虑过删除getIntersections()方法   完全,但没有,因为有一些特殊情况   你确实需要一组交叉点。这时,我   但是,还没有找到加速getIntersections的方法   我会继续研究它。