MultiBitmap以AS3为中心

时间:2012-11-28 22:34:39

标签: actionscript-3 flash actionscript

主要代码:

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;
    import flash.display.BitmapData;
    import flash.geom.Rectangle;
    import flash.geom.Point;
    import flash.display.DisplayObject;
    import flash.display.Bitmap;

    public class Init extends Sprite {

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

        public function Init() {

            init();
        }

        function init():void
        {
            rects = new Array();
            var bitmap:BitmapData = new slider();
            var _point = new Point();
            for(var i:int = 0; i < numRects; i++)
            {
                var _rect = new Rectangle(i * _width, 0, _width, 80);
                var smallBD:BitmapData = new BitmapData(_width, 80);
                smallBD.copyPixels(bitmap, _rect, _point);
                //var d:Bitmap = new Bitmap(smallBD); 
                var rect:Rect = new Rect(smallBD, _width, _height);
                rect.x = i * _width + _width / 2;
                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 += _vr;
            }

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

        }


    }

}

这是直接类:

package  {
    import flash.display.Sprite;
    import flash.utils.ByteArray;
    import flash.display.Bitmap;
    import flash.display.BitmapData;

    public class Rect extends Sprite {

        private var bitmap:BitmapData,
        _width:Number,
        _height:Number;
        public function Rect(bitmap:BitmapData, width:Number = 20, height:Number = 80) {

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

        function init():void
        {
            graphics.beginBitmapFill(bitmap, null, true, true);

            graphics.drawRect(-_width / 2, 0, _width , _height);

            graphics.endFill();


        }

    }

}

我将导入的图像分成碎片,并且每个碎片都添加到每个矩形精灵中,所以我正在制作旋转效果,但问题是,当我制作它时,我才能使精灵居中,所以我做了(-_width / 2) - 使每个精灵按x轴居中,然后添加到x位置添加_width / 2的技巧,但我无法弄清楚为什么图像变形,你可以通过geting尝试这个代码一张780 x 80的图像 enter image description here

1 个答案:

答案 0 :(得分:0)

嗯,看到你使用beginBitmapFill()来制作矩形,你可以自由指定它的绘制位置。您似乎需要将矩形围绕其中心旋转,而不是左上角。你写好-_width/2作为开始X,现在你只需要写-height/2作为起始Y.

graphics.drawRect(-_width / 2, -_height / 2, _width , _height);

这将使您绘制的位图的中心位于精灵的(0,0)位置,这样您应用的任何旋转都会使精灵围绕其绘制的矩形的中心转动。

通常,如果你明确地将旋转应用于显示对象,它总是围绕它自己旋转(0,0),所以如果你想要补偿,要么写变换矩阵(在SO上有几个例子,比如说{{ 3}}),或绘制你的精灵,使(0,0)位于你想要旋转的点。