http://homepage2.nifty.com/natupaji/DxL ... m.html#N10
このサイトの落ちものゲームってとこです。
Key & ~OldKey と
何故古いキーが必要なんでしょうか?
OldKeyは前回入力キーです。何の意味があるんですか?
眺めても全く分りません。
テトリスで古いキーが必要な理由
-
ソーン
Re: テトリスで古いキーが必要な理由
コードのコメントに書いてある通り連打防止です。
これがなければ何気なく0.5秒押したら約30回も操作を行ってしまいます。
前回押されていなかった場合のみ通るようになってますね。
( Key & ~OldKey ) & PAD_INPUT_A は
(Key & PAD_INPUT_A) && !(OldKey & PAD_INPUT_A) と同じ動作をします。(はず、です。)
これがなければ何気なく0.5秒押したら約30回も操作を行ってしまいます。
前回押されていなかった場合のみ通るようになってますね。
( Key & ~OldKey ) & PAD_INPUT_A は
(Key & PAD_INPUT_A) && !(OldKey & PAD_INPUT_A) と同じ動作をします。(はず、です。)
-
ソーン
Re: テトリスで古いキーが必要な理由
あ、コメントがあったのは別の所ですね。シューティング基本です。
試しに Key & ~OldKey を Key に置き換えてみれて実行すればわかると思います。
私はやっていませんが、おそらくとてもプレイ出来たものではなくなるはずです。
試しに Key & ~OldKey を Key に置き換えてみれて実行すればわかると思います。
私はやっていませんが、おそらくとてもプレイ出来たものではなくなるはずです。
Re: テトリスで古いキーが必要な理由
C言語なら同じ動作はしないはずです。(例:Key=0x100,OldKey=0x010,PAD_INPUT_A=0x100で前者は256、後者は1)ソーン さんが書きました:( Key & ~OldKey ) & PAD_INPUT_A は
(Key & PAD_INPUT_A) && !(OldKey & PAD_INPUT_A) と同じ動作をします。(はず、です。)
if(( Key & ~OldKey ) & PAD_INPUT_A)とif((Key & PAD_INPUT_A) && !(OldKey & PAD_INPUT_A))なら
同じ動作をしそうです。(Key,OldKey,PAD_INPUT_Aが全て変数または定数と仮定した場合)
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)