2009-06-12 12 views
1

本当に大きくないかもしれないが、100フレームか何か。配列を作成し、個々のイメージを個別に読み込むことによって読み込む唯一の方法はありますか?大きなアニメーションを読み込むには、より良い方法がありますか?

load_image()は、イメージをロードしてBPPを変換するために作成した関数です。

expl[0] = load_image("explode1.gif"); 
expl[1] = load_image("explode2.gif"); 
expl[2] = load_image("explode3.gif"); 
expl[3] = load_image("explode4.gif"); 
... 
expl[99] = load_image("explode100.gif"); 

もっと良い方法であるはずです。少なくとも私は願っています。

答えて

1

一般的な技術は、単一の大きな画像はセルのグリッドに分割されるspritesheets、あります各セルはアニメーションの1つのフレームを含みます。多くの場合、任意のゲームエンティティのすべてのアニメーションフレームは、時には巨大なスプライトシートに配置されます。

+0

フレームの量がかなり多い場合、これはおそらく長期的には最良の方法でしょう(15以上) – Skurmedel

+0

私はスプライトを検討していましたが、私はスプライトを検討していましたが、 SDL_Surfaceを反復処理して切り取ります。だからこれはまだ何かをする良い方法です...アニメーションの50フレームを考えてみましょうか? – Justen

+0

基本的には、アニメーションのデータを繰り返し処理するものがあります。 SDL_BlitSurface関数はこれを非常に効率的にします。私はこのテクニックが200以上のフレームでスプライトをblitするのに使われているのを見ました。あなたがもっと使えない特別な理由はありません。 – SingleNegationElimination

1

多分ループの各反復のファイル名を構築する効用関数を使用してロードを簡素化:

LoadAnimation(char* isFileBase, int numFrames) 
{ 
    char szFileName[255]; 
    for(int i = 0; i < numFrames; i++) 
    { 
     // append the frame number and .gif to the file base to get the filename 
     sprintf(szFileName, "%s%d.gif", isFileBase, i); 
     expl[i] = load_image(szFileName); 
    } 
} 
+0

コードをお寄せいただきありがとうございます。おそらく私が作っているこの最初のプログラムでこれを使用します。 – Justen

1

グリッドとして読み込む代わりに、すべてのフレームを1つの垂直ストリップ(同じイメージ)にスタックします。次に、フレームあたりの行数を把握するだけで、フレーム行オフセットへのポインタを設定できます。あなたは、依然として、連続したスキャンラインを有することになり、それは、直接的にまたは些細なことに別々の画像に噛み込んで表示することができる。

関連する問題