0

有没有一种方法可以使用 AS3 将所有影片剪辑放在一个区域内,我需要它来进行多项选择。

4

5 回答 5

2

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);
    }
}
于 2010-10-16T12:01:58.473 回答
0

我很确定没有任何“内置”功能可以将所有电影剪辑都放在一个区域内。

唯一接近的可能是getObjectsUnderPoint。此方法将为您提供单个点下的 DisplayObjects 列表,而不是区域,但可用于手动查找区域中的 MovieClip。

于 2010-10-12T19:26:50.653 回答
0

你可以有一个精灵是“区域”。这意味着它是您要检查的区域的大小。所以只需遍历每个movieclip 并检查movieclip 是否与sprite 碰撞时使用hitTestObject 或hitTestPoint。如果是这样,那么它就在那个区域。这就是我在 RTS 游戏中创建拖动和选择单位的方式。

于 2010-10-13T02:58:06.147 回答
0

那么如果你想检查一个区域下的所有对象,你必须使用带有 hitTestPoint 方法的 for 循环。并且可以通过在此 for 循环上增加较大的增量来优化此循环。例如,如果您知道没有宽度或高度小于 50 像素的此类对象,那么您将在嵌套循环中的宽度或高度或两者上放置 50 作为增量。这是查找下所有点的示例矩形区域或您指定的任何区域

for(var j:int=Rect.x; j0) { trace ("找到的对象"+对象); } } }

于 2010-10-14T13:25:12.380 回答
0

那么如果你想检查一个区域下的所有对象,你必须使用带有 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); }

}

}

于 2010-10-14T13:27:55.683 回答