AS3:是否可以在屏幕上的特定区域添加不是矩形的子项?

时间:2013-04-15 18:55:45

标签: actionscript-3 shape addchild

我需要在特定区域添加许多子项(addChild())。这个区域不规则(图)。我注意到如果我想在我的图中添加许多孩子,Flash会创建代表我的身材的矩形,而我的一些孩子会走出图形而不是这个矩形。我想到了制作许多小矩形的想法,这些矩形将覆盖我的非常规图形并使用数组将所有孩子分配到那些小矩形中。这是正确的方法吗? 我会欣赏一些想法。 感谢

// --------------------------------------------- -------------------------------

                function randomRange(max:Number, min:Number = 0):Number
    {
        return Math.random() * (max - min) + min;
    }

    public function Main()
    {
        var bounds:Rectangle = Area_mc.getBounds(Area_mc.stage);
        var xIncr:int = randomRange(15,320);
        var yIncr:int = randomRange(15,220);
        for (var xPos=bounds.x; xPos <= bounds.x + bounds.width; xPos += xIncr)
        {
            for (var yPos=bounds.y; yPos <= bounds.y + bounds.height; yPos += yIncr)
            {
                var isInsideShape:Boolean = Area_mc.hitTestPoint(xPos,yPos,true);
                if (isInsideShape)
                {
                    //trace(isInsideShape);
                    stage.addChild(_symbol);
                    _symbol.x = xPos;
                    _symbol.y = yPos;
                }

            }
        }
    }    

好的,我有随机的X和Y,但孩子总是在容器的右侧!:)

2 个答案:

答案 0 :(得分:1)

我无法理解你的确切要求。根据我的理解,如果你在非矩形形状的动画片段上添加孩子,你可以使用MovieClip的hitTestPoint()函数。

例如,如果您要在非矩形“父”动画片段上添加'child'movieclip,则可以使用hitTestPoint检查某个点是否在父动画片段的形状内,然后将其添加到该动画片段上点。

下面的代码将添加'Child'类的实例,该类在'parentMovieClip'上扩展了movieclip。 'Child'是库中movieclip的链接名称,其实例需要在非矩形父级上添加。 'parentMovieClip'是舞台上的movieclip的实例名称。

//storing bounds of parent that is added on stage
var bounds:Rectangle = parentMovieClip.getBounds(parentMovieClip.stage);

//these are the x and y gap you need between each child
var xIncr:int = 5;
var yIncr:int = 5;

//Traverse through the rectangular bound, and check what points actually comes within the shape
for(var xPos=bounds.x; xPos <= bounds.x+bounds.width; xPos += xIncr)
{
    for(var yPos=bounds.y; yPos <= bounds.y+bounds.height; yPos += yIncr)
    {
            //check if the point is inside the parent's shape
        var isInsideShape:Boolean = parentMovieClip.hitTestPoint(xPos,yPos,true);
        if(isInsideShape)
        {
            //if point is indise the shape add an instance of 'Child'
            var oChild:Child = new Child();
            //we are adding oChild on stage 
            //since adding on parentMovieClip will increase its bound if oChild goes outside parentMovieClip 
            stage.addChild(oChild);
            oChild.x = xPos;
            oChild.y = yPos;
        }
    }
}

如果您通过提供一些代码示例来详细说明您的要求,我或许可以为您提供准确的解决方案。

答案 1 :(得分:0)

不,这是艰难的方式。

更好

1)将区域定义为多边形。

2)通过算法检查你想要添加的新对象的边界 检测点是否在多边形内。

Here is a good algorithm in C, which is short, brief, easy to convert to as3 and educative.