我正在寻找找到区域内所有形状的最快方法。 请在Chrome或FireFox中尝试此示例:http://jsfiddle.net/markusleth/FBjKY/
我知道如何迭代和比较坐标,但我担心性能。任何建议都表示赞赏。
var x1, x2, y1, y2;
var shapes = stage.get("Rect");
shapes.each(function (shape) {
// calculate if shape is inside x1, x2, y1, y2
});
答案 0 :(得分:2)
嗯,KineticJS有几个交叉函数:
intersects(point)
Kinetic.Shape#intersects
getAllIntersections(pos)
Kinetic.Container#getAllIntersections
getIntersection(pos)
Kinetic.Stage#getIntersection
尽管getAllIntersections
可能是您需要的功能,但看起来KineticJS的作者强烈建议在getIntersection
之后使用getAllIntersections
IF 。这是因为getAllIntersections
在连续多次调用时表现不佳,这可能是您的问题。
根据我的经验,getIntersection
只检索与点相交的1个对象,它似乎只返回添加到舞台的最新对象,它与点相交!我不确定你会在你的情况下如何使用它。
用户EliteOctagon编写了自己的碰撞检测功能,取得了更好的成功(以及更好的性能!):HTML5 / kineticJS getIntersection function implementation这可能是您最好的选择。祝你好运!
哦,另外一个关于性能的小提示:如果你试图选择形状而不仅仅是“矩形”,如果你将所有可选形状命名为相同的名称,它会更好用,并使用{ {1}}在名称上运行,而不仅仅是.get()
。
例如:
.get("Rect")