具有多个图像的as3动画

时间:2013-03-27 21:51:36

标签: actionscript-3 animation flashdevelop

我只有3张图像用于动画正在运行的动物: 1:动物站立 2:动物大踏步/跳跃 3:动物背死了

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

1 个答案:

答案 0 :(得分: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

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

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