PDAのひとりごと

黄昏時、携帯情報端末は薄闇の向こうに何を見るのか

ポポペのプロ~4.右へ左へ

2004-07-10 18:12:55 | Lesson
 まず、前回の続きで、移動後のインベーダーの消去をから始めます。
 インベーダーが移動せずに増殖してしまったのは、移動前のキャラクタを消さなかったためです。
 通常のゲームでは背景があるので消すための処理に工夫がいりますが、今回のプログラムではバックが白1色なので、塗りつぶすだけで消去したことになります。
 インベーダー移動処理の最初に消去する処理を加えます。

void GmMoveInv(void)
{
 PatBlt( hdcScreen,    // 対象のHDC
    posInv.x,          // 表示位置 X座標
    posInv.y,          // 表示位置 Y座標
    32,                // 表示サイズ 幅
    24,                // 表示サイズ 高さ
    WHITENESS );       // 白で塗りつぶす

 移動速度に関しては、タイマそのもののインターバルを長くすることも考えられますが、速度を可変にしたいため、カウンタを設けて時間を調整することとします。
 まず、カウンタを作ります。場所は、ファイルの先頭部分、グローバル変数の宣言が並んでいる所で良いでしょう。

int iInvTime; // 移動タイミングカウンタ

 次に、カウンタを初期化します。初期化はプログラムの最初に1度行えばよいので、WM_CREATEが通知されたときとします。

iInvTime = 0;

 タイマを数えて、1秒経ったらインベーダーが移動するようにします。タイマを200mSに設定しているので、WM_TIMERが5回通知されると1秒になります。その処理をGmMoveInv関数の先頭に追加します。

iInvTime++;
if (iInvTime < 5) {
  return;
}
iInvTime = 0;

 ここまで追加したら、ビルドしてみましょう。今度の動きはいかがでしょうか?インベーダーが右から左へ動いて見えますね。移動量が1キャラクタ分のためカクカクした動きに見えるかもしれませんが、それは移動量を少なくすることによって解消できます。しかし、ここでは以降のプログラムの都合上そのままにしておきます。

最新の画像もっと見る

コメントを投稿