KineticJS和区域内的形状

时间:2013-07-05 10:02:25

标签: javascript kineticjs

我正在寻找找到区域内所有形状的最快方法。 请在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
});

1 个答案:

答案 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")