斜め入力を無効にしたい。

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

斜め入力を無効にしたい。

#1

投稿記事 by cupa » 7ヶ月前

四方向だけの移動にしたいです。

コード:

void Player::move()
{
	int		k[ 4 ] = { KEY_INPUT_RIGHT, KEY_INPUT_LEFT, KEY_INPUT_UP, KEY_INPUT_DOWN };
	bool		sayu = false, joge = false;
	float		moveX[ 4 ] = { mSpd, -mSpd, 0, 0, };
	float		moveY[ 4 ] = { 0, 0, -mSpd, mSpd };

	for( int i = 0; i < 2; i++ ){
		if( key.getPressingKey( k[ i ] ) > 0 ){
			sayu = true;
		}
	}
	for( int i = 2; i < 4; i++ ){
		if( key.getPressingKey( k[ i ] ) > 0 ){
			joge = true;
		}
	}

	for( int i = 0; i < 4; i++ ){
		if( !sayu || !joge ){
			if( key.getPressingKey( k[ i ] ) > 0 ){
				 mX += moveX[ i ];
				 mY += moveY[ i ];
			}
		}
	}

}
こうするの斜め入力はできなくなるのですが、「上下」と「左右」を同時押しした時に止まってしまいます。
そうではなく、「右を押していて下を押したら下に移動する」ようにしたいのですがどうすればいいでしょうか?

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

Re: 斜め入力を無効にしたい。

#2

投稿記事 by みけCAT » 6ヶ月前

こんな感じでしょうか? (コンパイル未確認)

コード:

void Player::move()
{
	int		k[ 4 ] = { KEY_INPUT_RIGHT, KEY_INPUT_LEFT, KEY_INPUT_UP, KEY_INPUT_DOWN };
	float		moveX[ 4 ] = { mSpd, -mSpd, 0, 0, };
	float		moveY[ 4 ] = { 0, 0, -mSpd, mSpd };
	float		deltaX = 0, deltaY = 0;

	// まず左右の判定を行う
	for( int i = 0; i < 2; i++ ){
		if( key.getPressingKey( k[ i ] ) > 0 ){
			deltaX += moveX[ i ];
		}
	}

	// 上下の判定を行い、押されていたら左右の移動をキャンセルする
	for( int i = 2; i < 4; i++ ){
		if( key.getPressingKey( k[ i ] ) > 0 ){
			deltaY += moveY [ i ];
			deltaX = 0;
		}
	}

	// 判定結果を反映する
	mX += deltaX;
	mY += deltaY;

}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

cupa
記事: 117
登録日時: 2年前

Re: 斜め入力を無効にしたい。

#3

投稿記事 by cupa » 6ヶ月前

いつもありがとうございます...!

度々申し訳ないのですが、
IF分で四方向のキー入力を確認するときに、

コード:

if( ... ) //右
if( ... ) //左
if( ... ) //上
if( ... ) //下
例えばこうしたとき、右キーの場合は入力しているときに左を入力するとそのキーに上書きされるのですが、左を押しているときは右を押しても上書きされません。同様に上を押しているときは下を押しても反応しません。
つまるところ、この場合だと左を押しているときに右を、下を押しているときに上を反応させたいです。

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

Re: 斜め入力を無効にしたい。

#4

投稿記事 by みけCAT » 6ヶ月前

後に押された方、すなわち押されてからの時間が短い方を有効にするといいかもしれません。

コード:

if( key.getPressingKey(KEY_INPUT_RIGHT) > 0 && ( // 右が押されている
    key.getPressingKey(KEY_INPUT_LEFT) == 0 || // 左は押されていない
    key.getPressingKey(KEY_INPUT_RIGHT) < key.getPressingKey(KEY_INPUT_LEFT) // 右の方が左より最近押された
)) // 右
if( key.getPressingKey(KEY_INPUT_LEFT) > 0 && ( // 左が押されている
    key.getPressingKey(KEY_INPUT_RIGHT) == 0 || // 右は押されていない
    key.getPressingKey(KEY_INPUT_LEFT) < key.getPressingKey(KEY_INPUT_RIGHT) // 左の方が右より最近押された
)) // 左
// 上と下も同様に
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

cupa
記事: 117
登録日時: 2年前

Re: 斜め入力を無効にしたい。

#5

投稿記事 by cupa » 6ヶ月前

返信が遅くなってしまいました...。

自分ではこういう考え方が出てこないので助かります、
ありがとうございます!

返信

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