プログラミングを勉強中の人のあれこれなブログ
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
暑くなってきました。
まだ5月なんですがね……。さておき前置きはこのぐらいにして今回はキー操作のアルゴリズム。
結構いろんなサイトを見てみると、
キー操作をウィンドウプロシージャで制御している方々が多いのですね。
私もそうするのかーと思っていたのですがあるとき先生(教えてもらっている人)に
「そこで管理する必要ないよ」
と言われて、じゃぁどうするの?という話をしていた時に教えてもらったのが以下のソース。
---------------------------------------------------------------
int Param = 0;
void keyControl()
{
if (GetAsyncKeyState(VK_SPACE) & 0x8000)
{
Param ++;
if (Param > 2)
{ Param = 2; }
}
else
{
if (Param == 2)
{ Param ++; }
if (Param == 3)
{ Param = 0; }
}
}
----------------------------------------------------------------
本当は、BOOLで制御するそうですが私にはよくわからないのでこのまま使用しております。
原理としては
1:入力を確認する
2:押されている間にカウントを+して行く。
3:カウントごとにIf分で制御する。
みたいな感じなのかしら。ちなみに使用するときは
if (Param == 1){ True };
みたいな感じです。
Param == 1:押された直後
Param == 2:押している間
Param == 3:離す時
Param == 0:何もしていない状態
というふうに場合分けしているのですね。
大掛かりなものになればなるほどプロシージャで管理するよりも
こちらで管理したほうがよいよいです。参考までにどうぞ。
テトリス制作なうにおいて発生した事件。
落下速度が、早すぎる…!
これ、どういうことかと申しますと。
ようは1フレームに1回移動させていたのが原因らしく、
移動量と相まってめっちゃ落下が早かったのですね。
さんざん悩んで先生(教えてもらっている人)に泣きつきつつ。
(いやほんとご迷惑かけてます、いつもありがとうございます。)
その先生に
「別に1フレームに1回移動させる必要なんてないのですよ」
と言われ、な、なるほど…!と感心せざるを得ない発見に。
ほんと、自分が初心者だと実感した瞬間…とまれ、そんな時にできたソースをご紹介。
-------------------------------------------------
int Count = 0;
void MovePiese()
{
Count ++;
if (Count >= 20)
{
//処理
Count = 0;
}
}
-------------------------------------------------
こんな感じ。
早い話、カウントをチャージしてカウントが一定を超えたら処理させて、カウントを初期化。
こうすることで、好きなタイミングで処理を可能にしました。
多分、いろんなサイトさんでも取り扱ってる方法の一つだと思いますが。
さてさて、次はブロックを次々と落下させる処理だー。