0

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

1 回答 1

2

好吧,KineticJS 有几个交集函数:

intersects(point) 动力学.形状#intersects

getAllIntersections(pos) Kinetic.Container#getAllIntersections

getIntersection(pos) Kinetic.Stage#getIntersection

虽然getAllIntersections可能是您需要的功能,但看起来 KineticJS 的作者强烈建议使用getIntersection IF possible over getAllIntersections。这是因为getAllIntersections连续多次调用时性能很差,这可能对您来说是个问题。

以我的经验,getIntersection只检索 1 个与该点相交的对象,并且它似乎只返回添加到舞台的最新对象,该对象与该点相交!我不确定您将如何在您的情况下使用它。

用户 EliteOctagon 编写了自己的碰撞检测函数,取得了更好的成功(和更好的性能!):HTML5 / kineticJS getIntersection 函数实现这可能是你最好的选择。祝你好运!

哦,还有一个关于性能的小技巧:如果您尝试选择形状而不仅仅是“矩形”,如果您将所有可选择的形状命名为相同的名称,并.get()在名称上使用函数而不是仅使用.get("Rect").

例如:

new Kinetic.Rect({
  name: "selectableShape"
});

new Kinetic.Ellipse({
  name: "selectableShape"
});

var selectableShapes = stage.get(".selectableShape");
于 2013-07-05T16:42:45.020 回答