有没有一种方法可以使用 AS3 将所有影片剪辑放在一个区域内,我需要它来进行多项选择。
5 回答
getObjectsUnderPoint().
如果所有项目都在一个包含剪辑中,则可能没有必要使用,您可以简单地遍历容器子项并检查它们是否在您的选择范围内。
// The list of items contained in the selection.
var selection:Array = new Array();
// The rectangle that defines the selection in the containers coordinate space.
var selectionRect:Rectangle = new Rectangle(x, y, width, height);
// Loop throught the containers children.
for(var a:int; a<container.numChildren; a++){
// Get the childs bounds in the containers coordinate space.
var child:DisplayObject = container.getChildAt(a);
var childBounds:Rectangle = child.getRect(container);
// Check if this childs bounds against the selection bounds
if(childBounds.intersects(selectionRect)){
selection.push(child);
}
}
我很确定没有任何“内置”功能可以将所有电影剪辑都放在一个区域内。
唯一接近的可能是getObjectsUnderPoint。此方法将为您提供单个点下的 DisplayObjects 列表,而不是区域,但可用于手动查找区域中的 MovieClip。
你可以有一个精灵是“区域”。这意味着它是您要检查的区域的大小。所以只需遍历每个movieclip 并检查movieclip 是否与sprite 碰撞时使用hitTestObject 或hitTestPoint。如果是这样,那么它就在那个区域。这就是我在 RTS 游戏中创建拖动和选择单位的方式。
那么如果你想检查一个区域下的所有对象,你必须使用带有 hitTestPoint 方法的 for 循环。并且可以通过在此 for 循环上增加较大的增量来优化此循环。例如,如果您知道没有宽度或高度小于 50 像素的此类对象,那么您将在嵌套循环中的宽度或高度或两者上放置 50 作为增量。这是查找下所有点的示例矩形区域或您指定的任何区域
for(var j:int=Rect.x; j0) { trace ("找到的对象"+对象); } } }
那么如果你想检查一个区域下的所有对象,你必须使用带有 hitTestPoint 方法的 for 循环。并且可以通过在此 for 循环上增加较大的增量来优化此循环。例如,如果您知道没有宽度或高度小于 50 像素的此类对象,那么您将在嵌套循环中的宽度或高度或两者上放置 50 作为增量。这是查找下所有点的示例矩形区域或您指定的任何区域
for(var j:int=Rect.x; j<=Rect.width; j++) {
for(var i:int=Rect.y; i<=Rect.height; i++) {
var pt:Point = new Point(x,y);
对象 = container.getObjectsUnderPoint(pt)
if(objects.length>0) { trace ("找到的对象"+objects); }
}
}