我只有3张图像用于动画正在运行的动物: 1:动物站立 2:动物大踏步/跳跃 3:动物背死了
目前,我将它们作为精灵嵌入到主类中,并在我想要的时候改变它们的.alpha属性而不是其他2.有没有更好的方法来做我正在做的事情?令人讨厌的事情之一是单独更新每个sprite的属性。拥有一个对象并能够更改对象上的图像是理想的,因此我只需要更改一个对象的属性。
答案 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更快,你仍然可以使用所有内置方法!!