こんばんは。ゲームプログラミングの館を参考に勉強させてもらっているのですが、
どうしても2方向のキャラの歩きが上手くいかなくて質問させて頂きました。
640*248のサイズで、16分割、 x軸8 y軸2 キャラのドットのサイズは、80*124です。
右方向のみの歩きは上手くいったのですが、左方向に歩かせようとすると、32ピクセル歩いた時点でキャラが右を向いてしまいます。左方向へ歩きながら32ピクセル歩く度に右を向くのです。
#include "DxLib.h"
typedef struct{
int x, y , img,muki,walking_flag;
}ch_t;
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
int image[16];
char Key[256];
ch_t ch;
if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //ウィンドウ化と初期化処理
ch.x =320;
ch.y =160;
ch.walking_flag=0;
ch.muki=1;
SetDrawScreen( DX_SCREEN_BACK ) ; //描画先を裏画面に設定
LoadDivGraph( "char.bmp" , 16 , 8 , 2 , 80 , 124 , image ) ;//画像を分割してimage配列に保存
while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){
//↑メッセージ処理 ↑画面をクリア ↑キーボード入力状態取得 ↑ESCが押されると終了
if(ch.x%32==0){ //座標が32で割り切れたら入力可能
ch.walking_flag=1; //歩くフラグを立てる。
if ( Key[ KEY_INPUT_RIGHT ] == 1 ) //右ボタンが押されたら
ch.muki=0; //右向きフラグを立てる
else if( Key[ KEY_INPUT_LEFT ] == 1 ) //左ボタンが押されたら
ch.muki=1; //左向きフラグを立てる
else //何のボタンも押されてなかったら
ch.walking_flag=0; //歩かないフラグを立てる
}
if(ch.walking_flag==1){ //歩くフラグが立っていたら
if (ch.muki==0) //右向きならch.x座標をふやす
ch.x++;
else if(ch.muki==1) //左向きならch.x座標を減らす
ch.x--;
}
ch.img=image[(ch.x%32)/4 + ch.muki*2]; //画像をセット
DrawGraph( ch.x , ch.y , ch.img , TRUE ) ;//画像を描画
ScreenFlip();//裏画面を表画面に反映
}
DxLib_End();
return 0;
}
ご教授いただければ幸いです。よろしくお願い致します。。
左右2方向の歩きが上手くいきません
Re:左右2方向の歩きが上手くいきません
ここの式があやしいです。
ch.img=image[(ch.x%32)/4 + ch.muki*2]; //画像をセット
横に8パターンあるなら、ch.muki*8じゃないとまずいですよ。
ch.img=image[(ch.x%32)/4 + ch.muki*2]; //画像をセット
横に8パターンあるなら、ch.muki*8じゃないとまずいですよ。