if()else()の後に違うif()else()を書く時

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

if()else()の後に違うif()else()を書く時

#1

投稿記事 by chalaza » 14年前

キャラクターを右上、左上、右下、左下に動かすだけの簡単なプログラムでちょっとつまづいてしまいました。
ゲームプログラミングの館で、マップ1マス分キャラを歩かす方法を見てきて、作ってみたのですが、
右上だけ(1方向だけ)の処理だとうまく動くのですが、右下や左下の処理を加えると変な動きになってしまいます。
if(~~)else(~~)の後に続けてif(~~)else(~~)を書いたのがいけないとかなのでしょうか…簡単なことですみません

歩く部分です。

コード:

void PlayerMove()
{

	if(( GetJoypadInputState( DX_INPUT_KEY_PAD1 ) & PAD_INPUT_UP ) != 0 ){ //上キーが押されたら右上へ
		Player.Y -=1;
		Player.X +=2;
	}
	else if(Player.X%24!=0){//24で割り切れるまで歩行
		Player.Y -=1;
		Player.X +=2;
	}

	if(( GetJoypadInputState( DX_INPUT_KEY_PAD1 ) & PAD_INPUT_RIGHT ) != 0 ){ //右キーが押されたら右下へ
		Player.Y +=1;
		Player.X +=2;
	}
	else if(Player.X%24!=0){//24で割り切れるまで歩行
		Player.Y +=1;
		Player.X +=2;
	}

	if(( GetJoypadInputState( DX_INPUT_KEY_PAD1 ) & PAD_INPUT_DOWN ) != 0 ){ //下キーが押されたら左下へ
		Player.Y +=1;
		Player.X -=2;
	}
	else if(Player.X%24!=0){//24で割り切れるまで歩行
		Player.Y +=1;
		Player.X -=2;
	}

	if(( GetJoypadInputState( DX_INPUT_KEY_PAD1 ) & PAD_INPUT_LEFT ) != 0 ){ //左キーが押されたら左上へ
		Player.Y -=1;
		Player.X -=2;
	}
	else if(Player.X%24!=0){//24で割り切れるまで歩行
		Player.Y -=1;
		Player.X -=2;
	}

	//X座標スクロール
	CameraX = Player.X - SCREEN_WIDTH/2 + 24;
	 if(CameraX < 0)CameraX = 0;
	 if(CameraX > (MAP_WIDTH*48)-SCREEN_WIDTH-24) CameraX = (MAP_WIDTH*48)-SCREEN_WIDTH-24;
            //背景表示座標をスクロール
        PlayerViewX = Player.X - CameraX;

		//Y座標スクロール
	CameraY = Player.Y - SCREEN_HEIGHT/2 + 24;
	 if(CameraY < 0)CameraY = 0;
	 if(CameraY > (MAP_HEIGHT*12)-SCREEN_HEIGHT-12) CameraY = (MAP_HEIGHT*12)-SCREEN_HEIGHT-12;
            //背景表示座標をスクロール
        PlayerViewY = Player.Y - CameraY;

}

アバター
沖 滉均
記事: 237
登録日時: 14年前
住所: K県F市

Re: if()else()の後に違うif()else()を書く時

#2

投稿記事 by 沖 滉均 » 14年前

chalaza さんが書きました:if(~~)else(~~)の後に続けてif(~~)else(~~)を書いたのがいけないとかなのでしょうか
そうですね、これだとたとえば上を押した場合に
4~7行目の条件が実行されたあと、他のキー方向の全てのelse if(~){…}の条件が実行されてしまいますね。

[追記]
一応、旧ゲームプログラミングの館ですが以下のページを参考にしてみると良いかもしれません
http://dixq.net/g/24.html
There is no royal road to learning.
codeタグで指定できる言語
画像

chalaza

Re: if()else()の後に違うif()else()を書く時

#3

投稿記事 by chalaza » 14年前

旧ゲームプログラミングの館の方を参考にさせていただきなんとかできました。
ありがとうございました。解決です。

閉鎖

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