【VBA】ゲーム作り(アニメーション)

仕事?ゲーム作り?必要なものは?

こんちは✋新しい洗濯機をドラム式にしようか迷っているjimです😕

今回は『ゲーム作り』という記事ですが、その前に、、、

自分は、ゲームが作れるなら(レベルにもよるが)、『プログラミング言語で、結構色んな事ができるようになってる。と思います😅

VBA以外の言語を使ってみたり、SQLでDBを操作してみたり。

どうしたら、処理の早いものができるか、正確なものができるか。そして、使いやすさはどうか?そこまで考えるようになってる気がする。

頼まれたツール1つ取ったって、ユーザーに不要なクリックさせない・判断をさせない、、とかね?

ゲーム作りだって、『ユーザーをいかに楽しませるか~。』なんだから、方向性が似てると思うのね。

どちらも、ユーザ目線で『いいもの作ろう』って気持ちが大事なんじゃないかな。って。

だから、つまりは仕事もゲームも『いいもの作ろう』とか『楽しませてやろう』っていう気持ちが上達の近道。。。かなと。

好きこそものの上手なれってね♪

勿論、いきなりゲーム作りはダメか?って言うとそうでもないのよコレが。

自分が、シューティングゲーム作ってから、飛躍的に伸びてるし🆙

前置きは、、そんなもん😅

 

アニメーション

ゲーム作りで必要なものの1つ『アニメーション』ね。

コレがないと何か寂しい😥

今回の記事で作るのは、

『Spaceキーを押すと、四角いオブジェクトが右から左に動く

それだけ。

それだけなんだけど、色んな所で使うから1番最初に紹介します。

簡単なんで『ふーん』くらいで見てください😝

ゲーム作りしようとして、プログラミング挫折とか無しだよ😓

1、画像を準備します

先ず、モノがないと動かしようがないので、画像を準備します。

パワポで大き目の図形を用意します。(gif形式で用意するのは透過性の点から)

本当に適当に準備しました。(コレ大きすぎ)

次に、コレを図として保存します。

適当な場所に保存してください。(自分の分かるトコね)

この図をユーザーフォームに設定していきます。

2、ユーザーフォームの準備

ユーザーフォームを挿入して、2つラベルを作成します。

(この時点で、サイズや位置は気にしなくていいです。)

Label1で的の画像Label2で台の画像を選択します。

画像の設定ができたら、コントロールのサイズを変更します。

ユーザーフォームから変更していくと良いでしょう。

上記の設定をコントロールのプロパティで変更します。

3、コーディング

ユーザーフォームの準備ができたら、コードを記述していきます。

今回は、API使って入力したキーを取得します。

APIは、外部機能を呼び出す呪文みたいに思って大丈夫です。(あんま細かいこと気にしないで☆)

以下のコードをOption Explicitの下に記述してね。

Private Declare Function GetAsyncKeyState Lib "User32.dll" (ByVal vbKey As Long) As Long

これで、入力されたキーを取得できるようになりました。

次に、ユーザーフォームを表示させた後に、無限ループを作って『Escキー』で終了できるようにします。

Sub syatekihuu()
    UserForm1.Label1.Visible = False
    UserForm1.Show vbModeless
    Do
        If GetAsyncKeyState(vbKeyEscape) Then
            End
        End If
        DoEvents
    Loop
End Sub

Doevents』を忘れないようにね。

これで、いつでも『Escキー』で終了できるようになりました。

次からは、いよいよアニメーション 🙄

座標のLeftは『0』が一番左端です。数が増えれば増えるほど右になります。(topは『』が一番上)

今回は、Label1の座標leftを『300』に設定し、ループする度にleftを『-0.1』にします。

そうすることによって、画像が右から左に動きます。

Private Sub mato()
Dim m As Double
     m = 300
    UserForm1.Label1.Visible = True
    Do While m > 10
        UserForm1.Label1.Left = m
        DoEvents
        m = m - 0.1
    Loop
    UserForm1.Label1.Visible = False
End Sub

変数『』をDouble型にしてますが、Variant型で大丈夫です。

先ず、m(的)を300に設定して、mが10より下になるまで続くループ(Do~Loop)を作りました。

その中に、

ループ内

1、Labelの座標をmに変更

2、画面の更新

3、mの値を減算

というコードを記述。

で、ループを抜けたらLabelを非表示。

最後に、『Spaceキー』を入力したら、アニメーションのプロシージャを呼び出すようにコードを追記。

Private Declare Function GetAsyncKeyState Lib "User32.dll" (ByVal vbKey As Long) As Long
Sub syatekihuu()
    UserForm1.Label1.Visible = False
    UserForm1.Show vbModeless
    Do
        If GetAsyncKeyState(vbKeyEscape) Then
            End
'アニメーションの呼び出し
        ElseIf GetAsyncKeyState(vbKeySpace) Then
            Call mato
        End If
        DoEvents
    Loop
End Sub

↓以下、全体

Option Explicit
Private Declare Function GetAsyncKeyState Lib "User32.dll" (ByVal vbKey As Long) As Long
Sub syatekihuu()
    UserForm1.Label1.Visible = False
    UserForm1.Show vbModeless
    Do
        If GetAsyncKeyState(vbKeyEscape) Then
            End
        ElseIf GetAsyncKeyState(vbKeySpace) Then
            Call mato
        End If
        DoEvents
    Loop
End Sub
Private Sub mato()
Dim m As Double
     m = 300
    UserForm1.Label1.Visible = True
    Do While m > 10
        UserForm1.Label1.Left = m
        DoEvents
        m = m - 0.1
    Loop
    UserForm1.Label1.Visible = False
End Sub

的が右から左へアニメーションしましたか?

今回は、減算を『-0.1』にしましたが、数値を変更すると速度も変わるはずです👍

 

最後に

簡単なアニメーションでしたが、如何でしたか?

こんな感じでアニメーションが作れます。

あと、座標とは関係ないけど、、、

ユーザーフォームのLabelに『MouseDwounイベントがあるので、ソレをブレークポイントにしてやりましょう。

そして、画像が動いている間にクリック!

Private Sub Label1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)

End Sub

ここで止まるはずです。

このイベントを当たり判定の代わりに使ってるのが、クレー射撃風のゲームです。

【VBA】またまたゲーム作ってみた

MouseDwounでLabel内の座標も取得できるので、細かく計算すれば演出の幅も広がりますよ。っていうね😊

初心者でも鋭い人だと、『あっ、色々できそう。』って感じたのでは?

そうなの、本当に色々できます✨

そして、色々試してる間に知識(技術)も増えてます。

良かったら、色々試してみて😝

んじゃ、またねぇ✋