ページ 11

クリック状態維持変数

Posted: 2013年9月11日(水) 22:05
by KSK
こんばんは。申し訳ありませんがさっそく質問させていただきます。
1フレーム前までマウス左ボタンが押されていて、
現在のフレームでマウス左ボタンが押されていないという判定をしようとしています。
左ボタンが押されていたらint型変数Counterに1を足し、
押されていなかったらCounterに0を代入、
tmpCounterには常にCounterを代入。
このCounterに対する処理(前)と、tmpCounterに対する処理(後)の間に

コード:

if(Counter==0&&tmpCounter>0)
の処理を書けば望むような処理になるでしょうか?
ややこしくて申し訳ありません。
よろしくお願いします。

Re: クリック状態維持変数

Posted: 2013年9月11日(水) 22:23
by みけCAT

コード:

int Counter=0,tmpCounter=0;
/* 中略 */
if(isLeftClickPressed())Counter++; else Counter=0;
if(Counter==0&&tmpCounter>0)onLeftClickReleased();
tmpCounter=Counter;
ということですか?

上の変数宣言が最初に1回だけ呼び出され、下の3行が1フレームに1回ずつ呼び出されるという仮定があれば、ほぼなると思います。
ただし、オーバーフローする可能性を考え、長押しの判定を使わないなら
「int型変数Counterに1を足し」ではなく「int型変数Counterに1を代入し」の方がいいと思います。
しかし、この場合Counter,tmpCounterの名前と役割が一致しないので、他の名前にするべきです。

簡単な判定法としては、一度自分で実験してみればいいと思います。
ただ、実験だけではコーナーケースを見抜けない可能性があるので、理論的な考察も大事です。

Re: クリック状態維持変数

Posted: 2013年9月11日(水) 23:49
by KSK
みけCATさん、ありがとうございます。そのような感じです。
書き忘れておりましたが、長押しにより攻撃のチャージ処理を行うのでカウンターにしています。
参考にさせていただきます。助かりました。