左右2方向の歩きが上手くいきません

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
万次郎

左右2方向の歩きが上手くいきません

#1

投稿記事 by 万次郎 » 15年前

こんばんは。ゲームプログラミングの館を参考に勉強させてもらっているのですが、
どうしても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;
}

ご教授いただければ幸いです。よろしくお願い致します。。

softya

Re:左右2方向の歩きが上手くいきません

#2

投稿記事 by softya » 15年前

ここの式があやしいです。
ch.img=image[(ch.x%32)/4 + ch.muki*2]; //画像をセット
横に8パターンあるなら、ch.muki*8じゃないとまずいですよ。

万次郎

Re:左右2方向の歩きが上手くいきません

#3

投稿記事 by 万次郎 » 15年前

おおおおおおおお!! ありがとうございます、ご指摘された箇所を直したら上手く表示されました!!

閉鎖

“C言語何でも質問掲示板” へ戻る