ページ 11

シューティングゲームの移動とショット

Posted: 2011年5月15日(日) 07:21
by siro
シューティングゲーム制作において少々不明な点が出ましたので質問させてもらいます。
プレイヤーキャラでショットを打ちながら左斜め上と、左斜め下に進めません。
右斜め上と、右斜め下にはショットを打っていても進むことができ、またショットを打ってなければ左斜め方向の移動は行うことができます。
左方向の斜め移動を行っているときは、ショットボタンを押してもショットが表示されず、
ショットボタンを押しているときは左方向の斜め移動に対しては、先に押した左か上下かのどちらかのキーのみが反応しているようです。

このサイトを参考に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;} //画面外に出た場合は使用状態をリセット
		}
	}
 }

Re: シューティングゲームの移動とショット

Posted: 2011年5月15日(日) 08:20
by fulls
私も同じ現象に悩まされたことがあります。
で、それはプログラムの問題ではなくキーボードの問題でした。
キーボードの物によっては特定のキーの同時押しに反応しない物があるようです。

Re: シューティングゲームの移動とショット

Posted: 2011年5月15日(日) 08:50
by siro
仰る通りキーボードの問題のようでした。
キーによって同時入力できるものが限られているようです。
参考までにyucky001 さんはどのように対応されたか教えていただけるとありがたいです。

Re: シューティングゲームの移動とショット

Posted: 2011年5月15日(日) 09:56
by fulls
私は我慢して使い続けました(^^;;
今はPCを買い換えたのでちゃんと動いています。
すいません、参考にならない様な書き込みでm(__)m

Re: シューティングゲームの移動とショット

Posted: 2011年5月15日(日) 12:06
by Dixq (管理人)
キーボードの種類によっては2つまでしかキーの同時押しが出来ないものがあるようです。
http://www.google.co.jp/search?sourceid ... 97&qscrl=1

ノートPCなら面倒ですが、3つ以上押せるようにするには、多数の同時キー入力に対応しているUSBキーボードを繋いでそれを利用するとかでしょうか。

Re: シューティングゲームの移動とショット

Posted: 2011年5月15日(日) 16:49
by siro
yucky001 さんDixq (管理人) さん回答ありがとうございます。
勉強になりました。同時押しにの件については新しくキーボードを購入することで対応することにします。