0

主要代码:

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

        }


    }

}

这是 rect 类:

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,但我无法弄清楚图像变形的原因,您可以通过获取 780 x 80 图像来尝试此代码 在此处输入图像描述

4

1 回答 1

0

好吧,看到您使用beginBitmapFill()以制作矩形,您可以自由指定将在哪里绘制。您似乎需要将矩形围绕其中心旋转,而不是左上角。你以 X 开头写得很好-_width/2,现在你只需要以-height/2Y 开头写。

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

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

一般来说,如果你简单地对显示对象应用旋转,它总是围绕它自己的 (0,0) 旋转,所以如果你想补偿,要么写变换矩阵(SO 提供的几个例子,比如这个),或者绘制您的精灵,使 (0,0) 位于您要旋转的点。

于 2012-11-29T03:53:35.910 回答