获取舞台区域内的所有电影剪辑

时间:2010-10-12 17:04:16

标签: flash actionscript-3 multipleselection

有没有办法让所有影片剪辑都在AS3区域内我需要这样做才能进行多项选择。

5 个答案:

答案 0 :(得分: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);
    }
}

答案 1 :(得分:0)

我很确定没有任何“内置”功能可以将所有Movieclips放入一个区域内。

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

答案 2 :(得分:0)

你可以有一个sprite是“区域”。这意味着它是您要检查的区域的大小。因此,只需循环浏览每个动画片段并使用hitTestObject或hitTestPoint进行检查(如果动画片段与精灵相撞)。如果是这样的话那就在那个区域。这就是我在RTS游戏中创建拖动和选择单位的方法。

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

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

for(var j:int = Rect.x; j&lt; = Rect.width; j ++) {

for(var i:int = Rect.y; i&lt; = Rect.height; i ++) {

var pt:Point = new Point(x,y);

objects = container.getObjectsUnderPoint(pt)

如果(objects.length大于0)  {   trace(“找到的对象”+对象); }

}

}