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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
崎島
記事: 7
登録日時: 8年前

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

#1

投稿記事 by 崎島 » 8年前

質問は件名の通り、「自機が右上、左上に行けません」です。


もう少し具体的に書きますと、
上キー+右キー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);
	}//右靡きグラ表示//

}

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

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

#2

投稿記事 by みけCAT » 8年前

崎島 さんが書きました:①何が原因で右上、左上に行けないのか
多分キーボードの仕様だと思います。
key配列に直接「上キー+LSHIFTキー+右キーor左キー」の入力データを入れて、問題の切り分けを行ってください。
崎島 さんが書きました:②どうやったら右上、左上に行けるようになるのか
原因がキーボードの仕様だった場合、
  • 「Nキーロールオーバー」に対応したキーボードを入手して使用する
  • 直接CheckHitKey関数を使用している部分もkey配列を参照するように変更した上で、ゲームパッドなどの入力をkey配列に反映させるようにする
のいずれかを行うといいと思います。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

崎島
記事: 7
登録日時: 8年前

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

#3

投稿記事 by 崎島 » 8年前

みけCATさん、返信ありがとうございます。

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

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

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

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

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

#4

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

よくゲームを作っている人から聞かれる内容ですね。
ノートPCによく見られますが3つ以上の同時入力に対応していないキーボードがあります。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

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

#5

投稿記事 by softya(ソフト屋) » 8年前

> どうやら、キーボードを変えなければいけないようです。
ゲーミングキーボードなど特殊なキーボードを前提とすると一般性が失われますので広く配布するゲームとしては向きません。
それよりは「上キー+LSHIFTキー+右キー」を必要とするゲームの仕様を変更すべきかと思います。

多くの人に配布しないならゲーミングキーボードの購入やゲームパッド前提で良いと思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

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

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

#6

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

> それよりは「上キー+LSHIFTキー+右キー」を必要とするゲームの仕様を変更すべきかと思います。

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

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

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

#7

投稿記事 by softya(ソフト屋) » 8年前

> 割とありませんか?
パッド前提の人なもので(汗)
「上キー+LSHIFTキー+右キー」っては普通のキーボードは大丈夫なんですね。
って事は崎島さんのキーボードが特殊ってことですか?
あとで確認します。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

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

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

#8

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

いや、確かに特殊ではありますが、ノートPCではよくある話らしく、
龍神録でも低速斜め移動ができないとの苦情を何件も受けたことがあります。
ただだからといって低速斜め移動を2キー以内にとどめる方法が思い浮かばないのです。。。。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

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

#9

投稿記事 by softya(ソフト屋) » 8年前

> ただだからといって低速斜め移動を2キー以内にとどめる方法が思い浮かばないのです。。。。

STGにおいて低速移動は必須ではないですよね。
なので、ゲーム性において実装の必然性まで考えるべきかなと思ったもので。
東方系なら必須なのかもしれませんが。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

閉鎖

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