2.5 アニメーションする方法
ゲームでは、自機や敵キャラは画面上を動き回るだけではなく、歩いたり転んだり飛んだり跳ねたりなどアニメーションをしながら動きます。でも、別にたいしたことをやっているわけではありません。パラパラマンガと同じで、少しずつ形を変えたパターンを何種類か用意しておき、それらを順番に表示するだけです。

プログラムを作るのは簡単だけど、実は寝たり倒れたり逆立ちしたりなど、スムーズにアニメーションさせるパターンを作る方が実は面倒だったりしますが、それは根性でカバーしましょう(笑)
パターンを作ってみよう
2.1 ワークシートをゲーム画面にする「で作った緑色の怪獣に、少し動きを付けたパターンを作ってみます。もし作ってない方がいれば、「2.1 ワークシートをゲーム画面にする」を参考にして、ひとまずワークシートの設定だけ行ってください。ただし、ワークシートを縮小表示(10%など…)したままだと作業がやりにくいので、とりあえず75%とか100%とか好みの大きさにしておいてください。

パターンの作成準備ができたら、セルに色を染めパターンを作ります。ココで作るパターンはココをクリックして開いたページの図を参考に描いてみてください。
アニメーションする例/Offsetプロパティを使った例
さて、苦労して描いた絵は早速アニメーションさせなくてはなりません。てなわけで、アニメーションする方法の一つ目はOffsetプロパティを使い複数のパターンを切り替え表示する例です。

Offsetプロパティというのは、「Rangeなどで指定した範囲からOffset(行, 列)で指定した先の部分を操作対象とする」というプロパティで、定義範囲の変更を行うプロパティです。例えば、元のパターンをR1C1〜R16C16で定義したときにOffset(16, 16)と指定すると、行・列に16加えたR17C17〜R32C32の部分を参照するように変更されます。

これを踏まえてサンプルで作ったパターンの場合、1つ目のパターンがR1C1〜R16C16、2つ目のパターンがR1C17〜R16C32の範囲です。基準となるパターンを1つ目のパターンにした場合、2つ目のパターンを参照するときはOffset(0,16)、1つ目パターンを参照するときはOffset(0,0)です。

例では、歩くようなアニメーションをしながら横移動しています。Rangeオブジェクトは1つ目のパターン(R1C1〜R16C16)で作成しておき、表示毎にOffsetプロパティを使ってコピー元を変更することでアニメーションしています。

Sub prcAnimation1()

    Dim i As Long
    Dim j As Long
    Dim objChar As Range
    Dim lngPtn As Long

    '怪獣のパターンを定義します
    Set objChar = Range(Cells(1, 1), Cells(16, 16))

    'Offsetの位置制御用 最初は0
    lngPtn = 0

    For i = 1 To 50

        '怪獣を描画します
        objChar.Offset(0, lngPtn).Copy _
            Destination:=Range(Cells(21, i), Cells(36, i + 15))

        'Offsetの参照先制御です 0,16,0,16…を繰り返します
        lngPtn = lngPtn + 16
        If lngPtn > 16 Then
           lngPtn = 0
        End If

        '時間稼ぎのループです
        For j = 1 To 5000: DoEvents: Next

    Next

End Sub
 ※このエクセルマクロはワークシート内へ記述するマクロです
アニメーションする例/配列のRangeオブジェクトを使う例
パターンをアニメーションする2つ目の方法です。複数パターンを配列にしたRange型の変数のそれぞれに定義し、表示毎にパターン番号を切り替える方法です。

例では、歩くようなアニメーションをしながら横移動しています。Range型の変数は配列で2つ用意し、配列番号1はR1C1〜R16C16の範囲を、配列番号2はR1C17〜R16C32を定義しておき、表示毎にパターンの番号を変更することでアニメーションしています。


Sub prcAnimation2()

    Dim i As Long
    Dim j As Long
    Dim objChar(1 To 2) As Range
    Dim lngPtn As Long

    '怪獣のパターンを定義します
    Set objChar(1) = Range(Cells(1, 1), Cells(16, 16))
    Set objChar(2) = Range(Cells(1, 17), Cells(16, 32))

    'パターン番号の制御用 最初は1
    lngPtn = 1

    For i = 1 To 50

        '怪獣を描画します
        objChar(lngPtn).Copy _
            Destination:=Range(Cells(20, i), Cells(36, i + 15))

        'パターン番号の変更です 1,2,1,2…を繰り返します
        lngPtn = lngPtn + 1
        If lngPtn = 3 Then
           lngPtn = 1
        End If

        '時間稼ぎのループです
        For j = 1 To 5000: DoEvents: Next

    Next

End Sub
Copyright(C) 1999-2006 結城圭介。 All rights reserved