0

我只有 3 张图像用于为奔跑的动物制作动画:1:动物站立 2:大步/跳跃的动物 3:仰卧的动物死了

目前,我将它们作为精灵嵌入到主类中,并在我想要一个而不是另一个时更改它们的 .alpha 属性 2. 有没有更好的方法来做我正在做的事情?令人讨厌的事情之一是单独更新每个精灵的属性。拥有一个对象并能够更改对象上的图像将是理想的,因此我只需要更改一个对象的属性。

4

1 回答 1

5

为此,最好在自己的类中处理您的动画!像这样,假设你的动物是一匹马,所以这就是我所说的类

package  {

    import flash.display.Sprite;

    public class Horse extends Sprite{

        private var holder:Sprite = new Sprite();

        public function Horse() {

            var img1:Image1 = new Image1();// ur images from library
            var img2:Image2 = new Image2();
            var img3:Image2 = new Image3();

            holder.addChild(img1);
            holder.addChild(img2);
            holder.addChild(img3);

            addChild(holder);
            setImage(0);// set 1st image visible

        }   

        public function setImage(nr:uint):void
        {
            for(var i:int = 0; i < holder.length;i++;)
                holder[i].visible = false;

            holder[nr].visible = true;
        }
    }

}

那么你会像这样使用它!

var horse:Horse = new Horse();
addChild(horse);
horse.x = 25; 
horse.y = 25; // move the whole object(all 3 images)
horse.setImage(2);// or to whatever frame you need

使用可见属性而不是 alpha 值。如果你只是将 alpha 设置为 0,它仍然会被渲染并花费 cpu。如果将 visible 设置为 false 则不会呈现!

编辑:
正如 Amy 指出的那样,虽然最快的方法是 BitmapData Frame Assignment,但在这里可以使用 blitting!在这里,您将所有帧作为 BitmapData 保存在 Vector 中,您可以从 SpriteSheet 加载它,并将新的 BitmapData 分配给您的 Bitmap,而不是使用 copyPixels。它比 blitting 更快,并且您仍然可以使用所有内置方法!

于 2013-03-27T22:41:40.217 回答