操縦型でボタンの2度押しを処理するルーチンを作った。
ボタンひとつだけならいくらでもやり方はあるのだけど。
十字キーの2度押しで急速移動をする場合、8方向それぞれにローカルなカウンタやループを作っていてはおぼつかない。
そこでカウンタ取得のボタン状態値を使って一括処理する方法が考えられる。
前回のボタン状態値をA、今回のボタン状態値をBとすると
B=B-(AandB)が今回新たに「押された」ボタンだ。
前回「押された」ボタンをCが保持しているとすればさらに、
D=CandBは2回以上連続で押されたボタンの値になる。
ここに0.3秒経過でCを0クリアする操作を含める。
以上で、ボタンが押されている→Dがそのボタンの値か?
で移動と急速移動に1チップで分岐できるようになる。
チップ数を食う十字キーの組み合わせ判断をジャンプ、移動、急速移動で共有できることになる。
実際に試してみると操作感は良好で、斜め急速移動はボタンを2つ同時に押すので入力がやや難しいが十分使っていける。
上記のボタン状態値の計算は、対象とするボタンが増えても一定で、時間にすると9チップ分かかっている。
以前書いたように操縦型は最低限の反応性を保証してやらないと扱いにくいので、この9チップは非常に高コストと言える。
この方法に限らず、操縦型ではCPU性能がまったく追いついていない。
次回作ではCPU速度をさらに上げてもバチは当たらないんじゃないだろうか。
ボタンひとつだけならいくらでもやり方はあるのだけど。
十字キーの2度押しで急速移動をする場合、8方向それぞれにローカルなカウンタやループを作っていてはおぼつかない。
そこでカウンタ取得のボタン状態値を使って一括処理する方法が考えられる。
前回のボタン状態値をA、今回のボタン状態値をBとすると
B=B-(AandB)が今回新たに「押された」ボタンだ。
前回「押された」ボタンをCが保持しているとすればさらに、
D=CandBは2回以上連続で押されたボタンの値になる。
ここに0.3秒経過でCを0クリアする操作を含める。
以上で、ボタンが押されている→Dがそのボタンの値か?
で移動と急速移動に1チップで分岐できるようになる。
チップ数を食う十字キーの組み合わせ判断をジャンプ、移動、急速移動で共有できることになる。
実際に試してみると操作感は良好で、斜め急速移動はボタンを2つ同時に押すので入力がやや難しいが十分使っていける。
上記のボタン状態値の計算は、対象とするボタンが増えても一定で、時間にすると9チップ分かかっている。
以前書いたように操縦型は最低限の反応性を保証してやらないと扱いにくいので、この9チップは非常に高コストと言える。
この方法に限らず、操縦型ではCPU性能がまったく追いついていない。
次回作ではCPU速度をさらに上げてもバチは当たらないんじゃないだろうか。
PR