【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は『0』が一番上)
今回は、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
変数『m』を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
ここで止まるはずです。
このイベントを当たり判定の代わりに使ってるのが、クレー射撃風のゲームです。
MouseDwounでLabel内の座標も取得できるので、細かく計算すれば演出の幅も広がりますよ。っていうね😊
初心者でも鋭い人だと、『あっ、色々できそう。』って感じたのでは?
そうなの、本当に色々できます✨
そして、色々試してる間に知識(技術)も増えてます。
良かったら、色々試してみて😝
んじゃ、またねぇ✋
ディスカッション
コメント一覧
まだ、コメントがありません