1
package  {
    import flash.display.Sprite;
    import flash.events.MouseEvent;
    import flash.text.TextField;
    import flash.net.URLVariables;
    import flash.net.URLRequest;
    import flash.events.Event;

    public class Init extends Sprite {

        var rects:Array,
        numRects:int = stage.stageWidth / _width + 1,
        _width:Number = 20,
        _height:Number = 80,
        _rotation:int = 0;

        public function Init() {

            init();
        }

        function init():void
        {
            rects = new Array();
            for(var i:int = 0; i < numRects; i++)
            {
                var rect:Rect = new Rect();
                rect.x = i * 20;
                addChild(rect);
                rects.push(rect);
            }

            addEventListener(Event.ENTER_FRAME, onEnterFrame);
        }

        function onEnterFrame(e:Event):void
        {

            for(var i:int = 0; i < numRects; i++)
            {
                rects[i].rotationY += 1;
            }

            _rotation += 1;
            if(_rotation % 180 == 0)
            {
                removeEventListener(Event.ENTER_FRAME, onEnterFrame);
            }

        }

    }

}

这是 Rect 类:

package  {
    import flash.display.Sprite;

    public class Rect extends Sprite {

        private var color:uint,
        _width:Number,
        _height:Number;
        public function Rect(color:uint = 0x000000, width:Number = 20, height:Number = 80) {

            this.color = color;
            this._width = width;
            this._height = height;
            init();
        }

        function init():void
        {
            graphics.beginFill(color);

            graphics.drawRect(0, 0, _width, _height);

            graphics.endFill();


        }

    }

}

所以我创建了许多矩形并将它们每个循环移动 20 像素,所以现在它们已经填充了颜色,但是如果我有一个高度等于这些矩形的大图像,然后剪切该图像并用填充这些矩形中的每一个图像的一部分,就像制作拼图部件一样,我已经将图像导入到我的库中,但现在我不知道该怎么做,请问有什么想法吗?

4

1 回答 1

1

简而言之:如果您要分割图像,请使用位图作为您的 Rect 子项或基础,并使用底层BitmapData.copyPixels()方法用一张大图像中的像素填充您的 rects 的位图。一个例子:

        var megabase:BitmapData = new BigImage().bitmapData; // BigImage is an embedded asset name
        _sequence = new Vector.<BitmapData>();
        _rect = new Rectangle(0, 0, 64, 64); // my parts of image are 64x64 all, in general you should have (x,y,w,h) declared somewhere
        _point = new Point();
        var smallBD:BitmapData;
        _sequence = new Vector.<BitmapData>();
        for (i = 0; i < ssa.length; i++) {
            // ssa is a (x,y) array defining areas that each sprite will contain
            smallBD = new BitmapData(64, 64, true, 0);
            _rect.x = ssa[i][0];
            _rect.y = ssa[i][1]; 
            smallBD.copyPixels(megabase, _rect, _point);
            _sequence.push(smallBD);
        }

这会将一个巨大的megabase图像拆分为多个 64x64 图像,这些图像排列为 BitmapData 对象的 Vector。您显然会有不同的底层结构,但这里说明了主要原理。

于 2012-11-28T16:57:09.847 回答