我需要检测HTML5画布中的碰撞(我正在使用KineticJS库),到目前为止,我已经使用自己的方法来检测某个点是否在某个形状内。
我最近注意到有一个来自Container类的方法,getIntersections(point)应该完全符合我的要求。但是它似乎非常慢,所以当在画布上移动一个对象并对每个新位置使用该方法时,它变得无法使用。
有没有人用这种方法进行碰撞检测?如果没有,HTML5画布中是否有关于碰撞检测的提示?我无法检测点是否在旋转了一定度数的矩形内。
答案 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的方法 我会继续研究它。