実現したいこと
アニメーションを描画したい。
前提
visualstudioのc++でアニメーションを描画するプログラムを制作しています。
アニメーションの内容は画面に表示させたプレイヤーの画像が、進行方向と同じ方向に向き、それぞれに応じたアニメーションを表示するようにしたいです。アニメーションの元となる画像は上下左右一つにつき4枚あります。
それをtimer変数(time関数ではないです)、while文を用いり変数の値が特定の数値になったときアニメーションの画像を切り替えるようにします。数値は60までで、0以上15未満の時は1枚目の画像を、15以上30未満の時は2枚目を表示します。(30以降も同じ)
今悩んでいるのはこの部分で、現在画像読み込みの変数を
int grHandle1 = LoadTexture("right0.png"); int grHandle2 = LoadTexture("right1.png");
int grHandle3 = LoadTexture("right2.png"); int grHandle4 = LoadTexture("right3.png");
int grHandle5 = LoadTexture("left0.png"); int grHandle6 = LoadTexture("left1.png");
int grHandle7 = LoadTexture("left2.png"); int grHandle8 = LoadTexture("left3.png");
int grHandle9 = LoadTexture("back0.png"); int grHandle10 = LoadTexture("back1.png");
int grHandle11= LoadTexture("back2.png"); int grHandle12= LoadTexture("back3.png");
int grHandle13= LoadTexture("front0.png"); int grHandle14= LoadTexture("front1.png");
int grHandle15 = LoadTexture("front2.png"); int grHandle16= LoadTexture("front3.png");
このようにしていますが一つの方向につき四枚あるのでこれら全部のアニメーションを表示するとなると
1つのwhile文では足りません。この場合while文は4方向分用意する必要があるということでしょうか?
その場合コードが多くなってごちゃごちゃしてしまうので簡潔にする方法があればより良いですが…
あともう一つ悩んでいることがあり、下のコードのif(direction…)の部分でここにはdirectionの値によってプレイヤーのアニメーションを描画するコードです。
0の時上を向いている。1の時下を向いている。2の時左を向いている。3の時右を向いている。
先ほどの通り一つの方向につき四枚あるので、一つのif文に全てを書くとおかしくなります。
例としてif(direction == 0){
DrawSprite(posX,posY,grHandle1,1.0f,1.0f,0.0f,0xFFFFFFFF);
DrawSprite(posX, posY, grHandle2, 1.0f, 1.0f, 0.0f,0xFFFFFFF);以下grHandle3,4も書く
とすると一度に四枚の画像が読み込まれているのでエラーが発生します。
こちらもdirection == 0を複数書かなければいけないのでしょうか?
該当のソースコード
int posX = 400;int posY = 400; int V = 3;//プレイヤーが動く速さ
int direction = 0;int timer = 0;
int grHandle1 = LoadTexture("right0.png"); int grHandle2 =LoadTexture("right1.png");
int grHandle3 = LoadTexture("right2.png"); int grHandle4 =LoadTexture("right3.png");
int grHandle5 = LoadTexture("left0.png"); int grHandle6 = LoadTexture("left1.png");
int grHandle7 = LoadTexture("left2.png"); int grHandle8 =LoadTexture("left3.png");
int grHandle9 =LoadTexture("back0.png"); int grHandle10 =LoadTexture("back1.png");
int grHandle11= LoadTexture("back2.png"); int grHandle12= LoadTexture("back3.png");
int grHandle13= LoadTexture("front0.png"); int grHandle14= LoadTexture("front1.png");
int grHandle15 = LoadTexture("front2.png");int grHandle16= LoadTexture("front3.png");
if (keys[DIK_W]) {posY = posY - V;direction = 0;}
if (keys[DIK_S]) {posY = posY + V;direction = 1;}
if (keys[DIK_A]) {posX = posX - V;direction = 2;}
if (keys[DIK_D]) {posX = posX + V;direction = 3;}
while (timer == 60) {
timer++;
if (timer >= 0 && timer < 15) {
//ここで悩んでいます}
}
if (direction == 0){
DrawSprite(posX, posY, grHandle1, 1.0f, 1.0f, 0.0f, 0xFFFFFFFF);//ここも悩んでいます。
}
c++ ### 試したこと 1つの方向四枚分をgrHandle1として一つにまとめてみたがgrHandle1が複数あるよというエラーが出てしまい断念。 ### 補足情報(FW/ツールのバージョンなど) visualstudio2022 ここにより詳細な情報を記載してください。
