画像オブジェクトの変数の隠蔽

ソースコードにして、ほんの40行だった



しかし、これを組み込めば、画像のロード処理を完全に隠蔽し、
全く書かなくてすむ

これは画像オブジェクトをロード・生成する関数だ
Create( "img" , x , y );




その中身は、
Create( char*file , int x , int y)
{
static char FILE[ 1024 ][ 256 ];
↑こいつにどんどんfileを追加してゆく!!
static 画像OBJ  [ 1024 ];
static int N;//画像オブジェクトの数



if もしも、FILE[]の中にfileがあったら
生成のみを行う



if もしも、FILE[]の中にfileがなかったら
画像をロードしてから生成を行う
そして、FILEにfileを追加し、Nを一つカウントする


たったこれだけである

}
しかしたったのこれだけで、こういう事ができるようになる


先のplayer関数だ

player(){

Create( "shot.bmp" , x, y, speed, angle , shot_func);
 ここで生成 & ロードが出来るという事だ
}

何? メインループ中に画像のロードなんてしたくない

それならば、
プログラムの起動時に

-500という 画面の外を指定する事によって、 生成した次のフレームに消去される


Create( "shot.bmp" , -500, -500);
Create( "teki.bmp" , -500, -500);
Create( "player.bmp" , -500, -500);

こんな風にやっておけば、

メインループ中に画像のロードはされる事がなく
Createは、ただの生成関数の役割をする事になる


Create関数の中には、FILE[]の中に画像パスが保存され
画像OBJの中には、しっかりと残っているのである


コードにして、たったの40行




これは ロード関数 と 生成関数 の結合だ

これをオブジェクトの生成ではなく、

ロード関数 と 描画関数 を結合すれば、

このような擬似コードを、本当に実装する事ができるようになる


mainloop(){
   for(;;)
   {
    haikei();
    tokutengazou();
    player();
    teki();
   }
}

//例:背景
void  haikei(){
   Load_to_Draw("haikei.bmp" , 0, 0);
}

先にも書いたが、はじめに全てをロードしたいのなら


mainloop(){
   Load_to_Draw("haikei.bmp" , 0, 0);
//ここに  全く同じ記述をするだけだ
   for(;;)
   {
    haikei();
    tokutengazou();
    player();
    teki();
   }
}


これで、メインループに入る前に、ロードされる






この仕組みを使う上である、誰かがやりそうな失敗は、
"haikei.bmp" をdefineにしてしまう事、



それでは、この仕組みの良さを半分を使えない事になる





動的に中身を書き換えられる

char[]にしとけ!!!クズどもが!