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

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

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

#1

投稿記事 by siro » 14年前

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

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

fulls
記事: 72
登録日時: 14年前
住所: 埼玉

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

#2

投稿記事 by fulls » 14年前

私も同じ現象に悩まされたことがあります。
で、それはプログラムの問題ではなくキーボードの問題でした。
キーボードの物によっては特定のキーの同時押しに反応しない物があるようです。

siro

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

#3

投稿記事 by siro » 14年前

仰る通りキーボードの問題のようでした。
キーによって同時入力できるものが限られているようです。
参考までにyucky001 さんはどのように対応されたか教えていただけるとありがたいです。

fulls
記事: 72
登録日時: 14年前
住所: 埼玉

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

#4

投稿記事 by fulls » 14年前

私は我慢して使い続けました(^^;;
今はPCを買い換えたのでちゃんと動いています。
すいません、参考にならない様な書き込みでm(__)m

アバター
Dixq (管理人)
管理人
記事: 1662
登録日時: 14年前
住所: 北海道札幌市
連絡を取る:

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

#5

投稿記事 by Dixq (管理人) » 14年前

キーボードの種類によっては2つまでしかキーの同時押しが出来ないものがあるようです。
http://www.google.co.jp/search?sourceid ... 97&qscrl=1

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

siro

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

#6

投稿記事 by siro » 14年前

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

閉鎖

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