0

我需要在特定区域添加许多孩子(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,但孩子总是在容器的右侧!:)

4

2 回答 2

1

我无法理解您的确切要求。据我了解,如果您在具有非矩形形状的影片剪辑上添加子项,则可以使用影片剪辑的 hitTestPoint() 函数。

例如,如果您打算在非矩形“父”动画剪辑上添加“子”动画剪辑,则可以使用 hitTestPoint 检查某个点是否在父动画剪辑的形状内,然后将其添加到该点上。

下面的代码将添加扩展“parentMovieClip”上的movieclip 的“Child”类的实例。'Child' 是库中影片剪辑的链接名称,您需要将其实例添加到非矩形父级上。'parentMovieClip' 是舞台上的影片剪辑的实例名称。

//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;
        }
    }
}

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

于 2013-04-15T20:53:42.223 回答
0

不,这是艰难的道路。

更好的

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

2)通过一种算法检查要添加的新对象的边界,该算法可以检测一个点是否在多边形内。

这是一个很好的 C 算法,它简短、简短、易于转换为 as3 并且具有教育意义。

于 2013-04-15T20:25:17.653 回答