ページ 11

自機が右上、左上に行けません

Posted: 2015年8月30日(日) 15:55
by 崎島
質問は件名の通り、「自機が右上、左上に行けません」です。


もう少し具体的に書きますと、
上キー+右キーor左キーだけを押しているのであれば問題なく右上、左上に行くのですが、
上キー+LSHIFTキー+右キーor左キーを押すと、
動かなくなる、或いは右上、左上に行かない(上手く押すと、上、左、右には行けます)、
ということが起きてしまっています(LSHIFTキーに限ったことではありません。他のキーを押してもこのようになってしまいます)。

私なりに解決しようと、上、右、左、下に行く処理とは別に、右上、左上に行くような処理を書きましたが、ダメでした(この処理は消しました)。

ご教授いただきたいのは、
①何が原因で右上、左上に行けないのか
②どうやったら右上、左上に行けるようになるのか
以上の二点です。よろしくお願いいたします。

下に、自機の移動の処理を書いた関数と、自機の描画関数を載せます。

使用しているものは、
Visual Studio Community 2013
DXライブラリ
です。

コード:

//以下、プロトタイプ宣言
void move_player(void);
void draw_player(void);
struct PLAYER{ //自機情報
	double x, y;
	double draw_x, draw_y;
};
struct PLAYER p1;

//以下、関数

//自機の移動の処理
void move_player(){
	
	//右に行く処理
	if (key[KEY_INPUT_RIGHT] >= 1){
		p1.x = p1.x + 4;
		if (key[KEY_INPUT_LSHIFT] >= 1){
			p1.x = p1.x - 2;
		}
		if (p1.x > 100)p1.x = 100;
	}
	//下に行く処理
	if (key[KEY_INPUT_DOWN] >= 1){
		p1.y = p1.y - 4;
		if (key[KEY_INPUT_LSHIFT] >= 1){
			p1.y = p1.y + 2;
		}
		if (p1.y < -190)p1.y = -190;
	}
	//左に行く処理
	if (key[KEY_INPUT_LEFT] >= 1){
		p1.x = p1.x - 4;
		if (key[KEY_INPUT_LSHIFT] >= 1){
			p1.x = p1.x + 2;
		}
		if (p1.x < -310)p1.x = -310;
	}
	//上に行く処理
	if (key[KEY_INPUT_UP] >= 1){
		p1.y = p1.y + 4;
		if (key[KEY_INPUT_LSHIFT] >= 1){
			p1.y = p1.y - 2;
		}
		if (p1.y > 225)p1.y = 225;
	}

}

//自機の描画関数
void draw_player(){
	
	if (CheckHitKey(KEY_INPUT_LEFT) == 0 && CheckHitKey(KEY_INPUT_RIGHT) == 0){
		// 右と左が押されていない(通常グラ表示)//
		DrawGraph(p1.draw_x, p1.draw_y, Handle1, TRUE);
	}
	
	if (CheckHitKey(KEY_INPUT_LEFT) == 1 && CheckHitKey(KEY_INPUT_RIGHT) == 1){
		// 右と左が押されている(通常グラ表示)//
		DrawGraph(p1.draw_x, p1.draw_y, Handle1, TRUE);
	}

	if (key[KEY_INPUT_RIGHT] >= 1 && key[KEY_INPUT_LEFT] == 0){
		DrawGraph(p1.draw_x, p1.draw_y, Handle2, TRUE);
	}//左靡きグラ表示//

	if (key[KEY_INPUT_LEFT] >= 1 && key[KEY_INPUT_RIGHT] == 0){
		DrawGraph(p1.draw_x, p1.draw_y, Handle3, TRUE);
	}//右靡きグラ表示//

}

Re: 自機が右上、左上に行けません

Posted: 2015年8月30日(日) 17:02
by みけCAT
崎島 さんが書きました:①何が原因で右上、左上に行けないのか
多分キーボードの仕様だと思います。
key配列に直接「上キー+LSHIFTキー+右キーor左キー」の入力データを入れて、問題の切り分けを行ってください。
崎島 さんが書きました:②どうやったら右上、左上に行けるようになるのか
原因がキーボードの仕様だった場合、
  • 「Nキーロールオーバー」に対応したキーボードを入手して使用する
  • 直接CheckHitKey関数を使用している部分もkey配列を参照するように変更した上で、ゲームパッドなどの入力をkey配列に反映させるようにする
のいずれかを行うといいと思います。

Re: 自機が右上、左上に行けません

Posted: 2015年9月13日(日) 15:24
by 崎島
みけCATさん、返信ありがとうございます。

どうやら、キーボードを変えなければいけないようです。

右上に行く処理を加え、CheckHitKeyをkeyにしましたが、なにも変わりませんでした。

今は無理ですが、後々に友人にでも頼んで、他のパソコンでの動作確認をしようと思います。

Re: 自機が右上、左上に行けません

Posted: 2015年9月13日(日) 15:51
by Dixq (管理人)
よくゲームを作っている人から聞かれる内容ですね。
ノートPCによく見られますが3つ以上の同時入力に対応していないキーボードがあります。

Re: 自機が右上、左上に行けません

Posted: 2015年9月13日(日) 16:53
by softya(ソフト屋)
> どうやら、キーボードを変えなければいけないようです。
ゲーミングキーボードなど特殊なキーボードを前提とすると一般性が失われますので広く配布するゲームとしては向きません。
それよりは「上キー+LSHIFTキー+右キー」を必要とするゲームの仕様を変更すべきかと思います。

多くの人に配布しないならゲーミングキーボードの購入やゲームパッド前提で良いと思います。

Re: 自機が右上、左上に行けません

Posted: 2015年9月13日(日) 16:56
by Dixq (管理人)
> それよりは「上キー+LSHIFTキー+右キー」を必要とするゲームの仕様を変更すべきかと思います。

割とありませんか?
例えば東方ならShiftキーで低速移動、+右上移動はよく見る仕様だと思いますが。
龍神録もそうです。

Re: 自機が右上、左上に行けません

Posted: 2015年9月13日(日) 17:03
by softya(ソフト屋)
> 割とありませんか?
パッド前提の人なもので(汗)
「上キー+LSHIFTキー+右キー」っては普通のキーボードは大丈夫なんですね。
って事は崎島さんのキーボードが特殊ってことですか?
あとで確認します。

Re: 自機が右上、左上に行けません

Posted: 2015年9月13日(日) 19:24
by Dixq (管理人)
いや、確かに特殊ではありますが、ノートPCではよくある話らしく、
龍神録でも低速斜め移動ができないとの苦情を何件も受けたことがあります。
ただだからといって低速斜め移動を2キー以内にとどめる方法が思い浮かばないのです。。。。

Re: 自機が右上、左上に行けません

Posted: 2015年9月13日(日) 19:44
by softya(ソフト屋)
> ただだからといって低速斜め移動を2キー以内にとどめる方法が思い浮かばないのです。。。。

STGにおいて低速移動は必須ではないですよね。
なので、ゲーム性において実装の必然性まで考えるべきかなと思ったもので。
東方系なら必須なのかもしれませんが。