こんばんは。




特にネタもないので、ドラクエ的にぞろぞろと歩くパーティーを実装してみましょう。




まず準備段階として、向きを保存しておく必要があります。Characterクラスに整数型のdirectionを宣言し、上、下、左、右をそれぞれ3、0、1、2としておきましょう。いつか、話しかける時に何らかの方向の「逆」がすぐに計算できるよう、正反対の方向が足して3になるよう調整しておきます(微々たるものですが…)。




後は、Character配列のpartyと、現在のパーティーの人数をあらわすpartylengthさえあれば、以下の処理(Aとします)




for(int i = partylength-1; i > 0 ; i--){

  if(!(party[i-1].x == party[i].x && party[i-1].y == party[i].y)){

   if(party[i-1].direction == 2)

     party[i].x+=14;

   else if(party[i-1].direction == 1)

     party[i].x-=14;

   else if(party[i-1].direction == 0)

     party[i].y+=14;

   else

     party[i].y-=14;




   party[i].direction = party[i-1].direction;

 }


}





を移動が発生した時に呼び出せば、後をテクテクついて歩くパーティーの完成です。本当は1マス28ピクセルでやっているのですが、半マスずつの移動をアニメーションするために14という値になっています。




アニメーションを完成させるには、次のループにて以下の処理Bを実行すればいいです。

if(moving){

//さっき動いたばっかり。という訳で描画位置とか調整

 for(int i = 0; i < partylength; i++){

   if(party[i].x%28!=0){

     if(party[i].direction == 2)

       party[i].x+=14;

     else

       party[i].x-=14;

   }

   if(party[i].y%28!=0){

     if(party[i].direction == 0)

       party[i].y+=14;

     else

       party[i].y-=14;

   }

}




 




ただし、必ず気をつけなければいけない点がいくつかありますので、明日にでも説明したいと思います。