首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MultiBitmap centering spirtes AS3

MultiBitmap centering spirtes AS3
EN

Stack Overflow用户
提问于 2012-11-29 06:34:39
回答 1查看 176关注 0票数 0

主代码:

代码语言:javascript
复制
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类:

代码语言:javascript
复制
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,但我不明白为什么图像会变形,你可以尝试这个代码,得到一个780x80的图像

EN

回答 1

Stack Overflow用户

发布于 2012-11-29 11:53:36

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

代码语言:javascript
复制
graphics.drawRect(-_width / 2, -_height / 2, _width , _height);

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

通常,如果您简单地将旋转应用于显示对象,它始终会围绕其自身的(0,0)旋转,因此,如果您要进行补偿,可以编写变换矩阵(例如this one ),或者绘制精灵以使(0,0)位于您要旋转的点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13615636

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档