Что не так с моей функцией анимации? - PullRequest
0 голосов
/ 15 июля 2009

Он оживляет, но помещает часть листа спрайта туда, где он находится на листе спрайта, а не туда, где его указывают x и y Это очень коротко, поэтому, пожалуйста, посмотрите? Заранее спасибо.

package cyanprime{
    import flash.display.*;
    import flash.geom.Rectangle;

    public class Player{
        [Embed(source="brownplane.png")]
        public var image:Class;
        public var bitmapdata:BitmapData = getBitmap(new image());
        public var bitmap:Bitmap = new Bitmap(bitmapdata);
        public var speed:int = 5;
        public var x:int = 50;
        public var y:int = 50;
        public var frame:int = 0;

        public function getBitmap(img:DisplayObject):BitmapData{
            var drawRect:Rectangle = new Rectangle((img.width/3) * frame, 0, img.width/3, img.height);
            var bitmap:BitmapData = new BitmapData(img.width, img.height);
            bitmap.draw(img,null,null,null,drawRect);
            return bitmap;
        }

        public function animate():void{
            bitmap.bitmapData = getBitmap(new image());
            frame++;

            if(frame > 2)
                frame = 0;

            bitmap.x = x;
            bitmap.y = y;
        }
    }
}

1 Ответ

1 голос
/ 16 июля 2009

Похоже, вам нужно добавить матричное преобразование для draw (), чтобы перевести положение нарисованного прямоугольника. Примерно так:

var trans:Matrix = new Matrix();
trans.tx = drawRect.x;
bitmap.draw(img,trans,null,null,drawRect);

Если это не сработает, попробуйте -drawRect.x, я не могу точно вспомнить, как применяется это преобразование.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...