トリガー、ホールド、リリース…

アバター
せんちゃ
記事: 50
登録日時: 15年前
住所: 江別市東野幌町
連絡を取る:

トリガー、ホールド、リリース…

投稿記事 by せんちゃ » 12年前

キーボード、パッドキーなどの入力において、

初回をとる「トリガー」
押しっぱなし「ホールド」
離されたときの「リリース」

のタイミングを取得する方法などなど。
カウンターで判別するのもアリですが初回タイミングというのはあらゆる場面で活用するので
覚えて損はない方法ともいえます。

とくにタスクシステムを活用してゲーム作りをするとオブジェクトがすべて独立して動いている必要があるので
静的に公開されてる変数を参照して「今自分自身がどうあるべきか」を判別して個々に挙動をとらせたほうが安全です。
常に通信が行われたり、別スレッドを走らせたりすると想定した順番で参照したいパラメーターがやってくる保証は一切ないので
オブジェクトが保存している現在のデータと外からやってくる状態変数の比較から初回タイミングを判別したりしなければいけないのです。



とりあえずキーボードのZボタンを使って
初回入力、入力しっぱなし、離されたとき
の3つの状態を取得してみます。

CODE:

bool key_input_next	=	false;
bool key_input		=	false;

bool isTrg()
{
	if( !key_input && key_input_next ){
		return true;
	}
	return false;
}

bool isHold()
{
	if( key_input ){
		return true;
	}
	return false;
}

bool isRel()
{
	if( key_input && !key_input_next ){
		return true;
	}
	return false;
}

void key_wait()
{
	if( CheckHitKey( KEY_INPUT_Z ) ){
		key_input_next = true;
	}
	else{
		key_input_next = false;
	}
}

void key_update()
{
	key_input = key_input_next;
}
至って単純な内容。
現在のステートと次回ステートの比較から判別するという方法

変化のタイミングを発見してトリガーフラグを立てるという方法は
ゲーム制作を含む様々な場面でよく使われる手法だと思うのでとりあえず書き残します
最後に編集したユーザー せんちゃ on 2013年2月11日(月) 20:10 [ 編集 1 回目 ]

ISLe
記事: 2650
登録日時: 15年前

Re: トリガー、ホールド、リリース…

投稿記事 by ISLe » 12年前

デジタル入力の方向キーやボタンを整数型変数のビットに割り当てておくと、ビット論理演算ですべての入力に対して一発(且つ1個分のコストよりも小さい)でトリガーを取れるので便利ですよ。
ということをせんちゃさんの1月16日の日記にコメントしてました。

アバター
せんちゃ
記事: 50
登録日時: 15年前
住所: 江別市東野幌町
連絡を取る:

Re: トリガー、ホールド、リリース…

投稿記事 by せんちゃ » 12年前

ISLeさん
そういえば以前もこんな感じのことを日記で書いたことがありましたね(笑)
複数の状態を管理するときは配列よりビットで取るようにと心がけていますね。