初回をとる「トリガー」
押しっぱなし「ホールド」
離されたときの「リリース」
のタイミングを取得する方法などなど。
カウンターで判別するのもアリですが初回タイミングというのはあらゆる場面で活用するので
覚えて損はない方法ともいえます。
とくにタスクシステムを活用してゲーム作りをするとオブジェクトがすべて独立して動いている必要があるので
静的に公開されてる変数を参照して「今自分自身がどうあるべきか」を判別して個々に挙動をとらせたほうが安全です。
常に通信が行われたり、別スレッドを走らせたりすると想定した順番で参照したいパラメーターがやってくる保証は一切ないので
オブジェクトが保存している現在のデータと外からやってくる状態変数の比較から初回タイミングを判別したりしなければいけないのです。
とりあえずキーボードのZボタンを使って
初回入力、入力しっぱなし、離されたとき
の3つの状態を取得してみます。
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;
}
現在のステートと次回ステートの比較から判別するという方法
変化のタイミングを発見してトリガーフラグを立てるという方法は
ゲーム制作を含む様々な場面でよく使われる手法だと思うのでとりあえず書き残します