从数组添加多个movieclip

时间:2013-05-06 04:30:43

标签: actionscript-3 flash class movieclip addchild

我从互联网上获得了这个功能,它将图像切成像瓷砖一样的部分并将它们放在一个数组中(线性或多维)。

--- ---实施例

var sliceClips:Array = sliceMovieClip({source:sourceMovieClip, target:tilesContainer, cols:7, rows:5}).linear;

所以这就是功能:

    private function sliceMovieClip(o:Object):Object
    {
        var returnArray:Array = new Array();
        var arrayLinear:Array = new Array();
        var array2D:Array = new Array();
        var cols:uint = o.cols;
        var rows:uint = o.rows;
        var tileWidth:uint = o.source.width / cols;
        var tileHeight:uint = o.source.height / rows;
        var rect:Rectangle = new Rectangle(0,0,tileWidth,tileHeight);
        var pnt:Point = new Point();
        var imageBMPD:BitmapData = new BitmapData(o.source.width,o.source.height,true,0x000000);
        var imageBMP:Bitmap = new Bitmap(imageBMPD);
        imageBMPD.draw(o.source);

        for (var tY:uint = 0; tY < rows; tY++)
        {
            var arrayRow:Array = new Array();
            for (var tX:uint = 0; tX < cols; tX++)
            {
                var sourceRect:Rectangle = new Rectangle(tX * tileWidth,tY * tileHeight,tileWidth,tileHeight);
                var destPoint:Point = new Point(0,0);
                var tileBMPD:BitmapData = new BitmapData(tileWidth,tileHeight,true,0x000000);
                var tileBMP:Bitmap = new Bitmap(tileBMPD);
                var tileMCL:MovieClip = new MovieClip();
                tileMCL.addChild(tileBMP);
                tileBMPD.copyPixels(imageBMPD, sourceRect, destPoint);
                tileMCL.x = tX * tileWidth;
                tileMCL.y = tY * tileHeight;
                o.target.addChild(tileMCL);
                returnArray.push(tileMCL);
                arrayRow.push(tileMCL);
            }
            array2D.push(arrayRow);
        }
        return {linear:arrayLinear, multi:array2D};
    }

我正在尝试使用这样的函数将这些部分图像切换到不同的位置(请查看最后的if):

    private function buildMap(e:Event):void
    {
        for (var i:int=0; i<visAreaY; i++)
        {
            for (var u:int=0; u<visAreaX; u++)
            {
                if ((MapID[i][u]) == 0)
                {
                    var cell:MovieClip = new tile();
                    cell.gotoAndStop(MapID[i][u]+1);
                    cell.x = tileSide * u;
                    cell.y = tileSide * i;
                    addChild(cell);
                }
                if ((MapID[i][u]) == 1)
                {
                    var cell2:MovieClip = new blacksquare();
                    cell2.gotoAndStop(MapID[i][u]+1);
                    cell2.x = tileSide * u;
                    cell2.y = tileSide * i;
                    addChild(cell2);
                }
                if ((MapID[i][u]) == 2)
                {
                    var cell3:MovieClip = sliceClips[2][0];
                    cell3.gotoAndStop(MapID[i][u]+1);
                    cell3.x = tileSide * u;
                    cell3.y = tileSide * i;
                    trace("Obj: " + cell3 + " w:" + cell3.width + " h:" + cell3.height + " pos:" + cell3.x + " " + cell3.y);
                    addChild(cell3);
                }
            }
        }
    }

cell3(使用切片图像)存在问题,因为它似乎使用相同的图像并且不会在我的舞台上复制它,所以如果我在地图上有4次它只会显示图像最后一块瓷砖。

我试图这样做:

var cell3:MovieClip = new sliceClips[2][0];

但它不会接受我的“新”因为它不是一个类。

知道如何解决这个问题吗?如何将我的movieclip数组设置为类或其他东西..我是as3的初学者

1 个答案:

答案 0 :(得分:0)

鉴于您的切片图像使用单个Bitmap对象,您可以做的最好的事情就是将位图克隆到新的MC中。

        if ((MapID[i][u]) == 2)
            {
                var cell3:MovieClip = new MovieClip();
                cell3.addChild(new Bitmap((sliceClips[2][0].getChildAt(0) as Bitmap).bitmapData));
                // main magic happens here ^ we get the bitmapdata of source MC
                // then make a new bitmap AND a new MC with it
                cell3.x = tileSide * u;
                cell3.y = tileSide * i;
                trace("Obj: " + cell3 + " w:" + cell3.width + " h:" + cell3.height + " pos:" + cell3.x + " " + cell3.y);
                addChild(cell3);
            }