シューティングゲームの移動とショット
Posted: 2011年5月15日(日) 07:21
シューティングゲーム制作において少々不明な点が出ましたので質問させてもらいます。
プレイヤーキャラでショットを打ちながら左斜め上と、左斜め下に進めません。
右斜め上と、右斜め下にはショットを打っていても進むことができ、またショットを打ってなければ左斜め方向の移動は行うことができます。
左方向の斜め移動を行っているときは、ショットボタンを押してもショットが表示されず、
ショットボタンを押しているときは左方向の斜め移動に対しては、先に押した左か上下かのどちらかのキーのみが反応しているようです。
このサイトを参考にDXlibを使用して作成しているのですが、自分では原因がわからないため投稿させてもらいました。
PlayerChara.x, .y はプレイヤーキャラのx,y座標
key はキーボードの入力状況
Playershot.x, .y はプレイヤーショットのx,y座標
PlayerShot.flag はプレイヤーショットの使用状況です。
関数内に記述してない変数についてはヘッダファイルに記述しております。
上記がキーの情報の取得とプレイヤーキャラの移動関数です。
次にショットの関数について記述します。
プレイヤーキャラでショットを打ちながら左斜め上と、左斜め下に進めません。
右斜め上と、右斜め下にはショットを打っていても進むことができ、またショットを打ってなければ左斜め方向の移動は行うことができます。
左方向の斜め移動を行っているときは、ショットボタンを押してもショットが表示されず、
ショットボタンを押しているときは左方向の斜め移動に対しては、先に押した左か上下かのどちらかのキーのみが反応しているようです。
このサイトを参考にDXlibを使用して作成しているのですが、自分では原因がわからないため投稿させてもらいました。
PlayerChara.x, .y はプレイヤーキャラのx,y座標
key はキーボードの入力状況
Playershot.x, .y はプレイヤーショットのx,y座標
PlayerShot.flag はプレイヤーショットの使用状況です。
関数内に記述してない変数についてはヘッダファイルに記述しております。
int UpdateKey(){ //入力されているキーのデータを取得
char keynow[256];
GetHitKeyStateAll(keynow);
for(int i = 0; i < 256; i++){
if(keynow[i] != 0){
key[i]++;
}
else{
key[i] = 0;
}
}
return 0;
}
void CharaMove(){ //キャラクター移動の関数
if(key[KEY_INPUT_RIGHT] >= 1) PlayerChara.x += 5; //プレイヤーキャラクターの移動
if(key[KEY_INPUT_LEFT] >= 1) PlayerChara.x -= 5;
if(key[KEY_INPUT_UP] >= 1) PlayerChara.y -= 5;
if(key[KEY_INPUT_DOWN] >= 1) PlayerChara.y += 5;
if(PlayerChara.x < 0) PlayerChara.x = 0; //画面の端まで来たら止める
if(PlayerChara.x >608) PlayerChara.x = 608;
if(PlayerChara.y < 0) PlayerChara.y = 0;
if(PlayerChara.y >448) PlayerChara.y = 448;
}
次にショットの関数について記述します。
void Player_Shot(){ //プレイヤーのショットの変数を操作
int i;
if(key[KEY_INPUT_Z] >= 1){
for(i = 0; i < PLAYER_SHOT2; i++){ //ショットの使用確認、座標入力
if(PlayerShot[i].flag == 0){
PlayerShot[i].flag = 1;
PlayerShot[i].x = PlayerChara.x;
PlayerShot[i].y = PlayerChara.y;
break;
}
}
}
for(i = 0; i < PLAYER_SHOT2; i++){
if(PlayerShot[i].flag == 1){
PlayerShot[i].y -= 20; //直線移動の軌跡
if(PlayerShot[i].y < -32){PlayerShot[i].flag = 0;} //画面外に出た場合は使用状態をリセット
}
}
}