0

走っている動物をアニメーション化するために使用している画像は 3 つだけです。

現在、私はそれらをスプライトとしてメイン クラスに埋め込み、他の 2 ではなく必要なときにいつでも .alpha プロパティを変更しています。煩わしいことの 1 つは、各スプライトのプロパティを個別に更新することです。オブジェクトが 1 つあり、そのオブジェクトの画像を変更できることが理想的です。そのため、オブジェクトのプロパティを 1 つ変更するだけで済みます。

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

アルファ値の代わりに visible 属性を使用してください。アルファを 0 に設定しただけでもレンダリングされ、CPU が消費されます。visible を false に設定すると、レンダリングされません!

EDIT:
エイミーが指摘したように、ここではブリッティングが可能ですが、最速のアプローチはBitmapData Frame Assignmentです!ここでは、すべてのフレームをベクター内の BitmapData として保持し、SpriteSheet からロードして、copyPixels を使用する代わりに新しい BitmapData をビットマップに割り当てるだけです。ブリッティングよりも高速であり、すべての組み込みメソッドを利用できます!!

于 2013-03-27T22:41:40.217 に答える