ページ 11

ボタンの処理

Posted: 2014年11月14日(金) 10:13
by megaman
こんにちは、またお世話になります。
変わらずロックマン風アクションを作っていますが、今回はボタンの処理について質問します。
ロックマンなら必要不可欠なチャージショットを実装しようを思っているのですが、基本となる
ソースの仕様が理解できません。
gamemain.cpp

コード:

//キートリガー処理
int IsBKeyTrigger(int key){
	if (key & PAD_INPUT_B){
		if (g_stagedata.g_bkey_prev == 0){
			g_stagedata.g_bkey_prev = 1;
			return 1;
		}

	}
	else {
		g_stagedata.g_bkey_prev = 0;
	}
	return 0;
}
おそらくg_stagedata.g_bkey_prevで押しっぱなしをさせないようにしてると思うのですが、
申し訳ありませんが、解説をお願いします。

Re: ボタンの処理

Posted: 2014年11月14日(金) 10:59
by usao
>おそらくg_stagedata.g_bkey_prevで押しっぱなしをさせないようにしてると思うのですが

ぱっと見,その通りかと思いますが… それ以上の何を尋ねているのでしょう?
オフトピック
>ロックマンなら必要不可欠なチャージショット

そんなことは無いと思います.

Re: ボタンの処理

Posted: 2014年11月14日(金) 11:08
by megaman
>usaoさん
返信ありがとうございます。
すいません、言葉足らずでした。私のやりたいことはこの変数に条件を増やして
「押しっぱなしにするとreturn 2を返す」というような処理に変更したいと思っています。

Re: ボタンの処理

Posted: 2014年11月14日(金) 11:45
by usao
提示コードでは,
「キーが押されているか?」 と 「g_bkey_prevの値が0か?」 の2つの状態の組み合わせ(4パターンある)
に対して,各組合せ時の処理が

・押されてて g_bkey_prev==0 のとき → g_bkey_prev=1; return 1;
・押されてて g_bkey_prev!=0 のとき → return 0;
・押されてなくて g_bkey_prev==0 のとき → g_bkey_prev=0; return 0;
・押されてなくて g_bkey_prev!=0 のとき → g_bkey_prev=0; return 0;

という形になってますよね.

>「押しっぱなしにするとreturn 2を返す」というような処理に変更したいと思っています。

上記4パターンのうち,「押しっぱなし」に相当するのはどれでしょうか?
(そのパターンの返り値を 2 に変更すればよいのかもしれません)

Re: ボタンの処理

Posted: 2014年11月14日(金) 11:57
by megaman
分かりやすくしていただき、ありがとうございます。
その中だと
・押されてて g_bkey_prev!=0 のとき → return 0;
が「押しっぱなし」になりそうですね。つまり

コード:

int IsBKeyTrigger(int key){
	if (key & PAD_INPUT_B){
		if (g_stagedata.g_bkey_prev == 0){
			g_stagedata.g_bkey_prev = 1;
			return 1;
		}
		else{
			g_stagedata.g_bkey_prev = 1;
			return 2;
		}
	}
	else {
		g_stagedata.g_bkey_prev = 0;
	}
	return 0;
}
にすればreturn 2;が戻り値となると。