ゲームプログラミングの館で、マップ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;
}