0

私は最近、NDS自作用のdevkitARMツールチェーンを実験しています。ただし、もっとよく理解したいのは、スプライトアニメーションの速度を制御する方法です。これを行うことを私が知っている唯一の方法は、「フレームを数える」ことです。たとえば、次のコードをdevkitproに含まれている「animate_simple」の例に配置できます。

int main(void) {
    int frame = 0;
    ...
    while(1) {
    ...
        if(++frame > 9)
            frame = 0;
    }
    return 0;
}

これは一般的には問題ありませんが、メインループで初期化されたすべてのアニメーションが設定された速度で実行されることを保証します。それぞれが異なる速度でアニメーション化する2つの異なるスプライトを作成するにはどうすればよいですか?任意の洞察をいただければ幸いです。

4

1 に答える 1

1

スプライトごとに個別のフレームカウンターを使用します。たとえば、スプライト構造体を作成できます。

typedef struct _Sprite Sprite;
struct _Sprite
{
    int frame;
    int count;
    int delay; /* handles the speed of animation */
    int limit;
};

// initialize all fields

void sprite_update(Sprite* s) 
{
    if ( ( s->count++ % s->delay ) == 0 ) )
    {
        if ( s->frame++ > s->limit ) s->frame = 0;
    }
}

アニメーションdelayが速い場合は値を小さくし、アニメーションが遅い場合は値を大きくします。

使用例:

Sprite my_spr, my_spr_2;

/* initialize the fields, or write some function for initializing them. */

my_spr.delay = 5; /* fast */
my_spr_2.delay = 10; /* slow */

/* < in Main Loop > */

while(1){
...
   sprite_update(&my_spr);
   sprite_update(&my_spr_2);
}

注: ターゲットとしているプラ​​ットフォームは1つだけなので、アニメーションの速度を制御する最良の方法は、フレームレートを監視することです(つまり、「フレームのカウント」と呼びます)。コンソールのプログラミングの良いところは、時間制限を設定する必要がないことです。同じモデルのすべてのコンソールデバイスは通常同じ速度で実行されるため、マシン(またはエミュレーター)で得られるアニメーションの速度は、誰もが得るのと同じになります。異なるプロセッサ速度は、PC用にプログラミングする際の大きな頭痛の種です。

于 2012-02-26T10:56:48.683 に答える