素人がゲームプログラム作成に挑戦
ゲームを買うお金がないから、ゲームを作るというゲームに挑戦!言語はVisual Basic(VB)をメインにC++、C#、Javaは参考程度
Entries
アニメーション その6
- ジャンル : コンピュータ
- スレッドテーマ : Visual Basic
アニメーション その5で右へ移動するプログラムを作成しました。
このプログラムはカーソルキーと連動させていませんのでどの方向キーを入力しても右にしか移動しませんでした。
今回は押されたカーソルキーの方向へ画像を移動させるプログラムを作成していきます。
移動速度を(32,0)とすることにより、右へ移動したのであれば、(-32,0)にすれば左、(0、-32)なら上、(0,32)なら下に移動します。
後は方向キーを押したときの動作に移動速度を設定すれば完了です。
ただ、画像切り替え処理のところではX座標の移動しかコードを記述していませんでしたから、上下を押しても変化しません。
よって、上下も変化するようにコードを追加しておく必要があります。
アニメーションその5のコードをちょっと変更するだけでカーソルキーと連動させることができます。
コードは↓のような感じです。
これでカーソルキーを押した方向に移動するプログラムができました。
ただ、このままでは常に移動し続けてしまうプログラムになっていますから、そこを修正していく必要があります。
やはりカーソルキーを1回押したら、1コマだけ移動するべきです。
勝手に2コマも3コマも移動するのは違和感があります。
ということで、次回は1コマだけ入力された方向に移動させるプログラムを作成していきます。
このプログラムはカーソルキーと連動させていませんのでどの方向キーを入力しても右にしか移動しませんでした。
今回は押されたカーソルキーの方向へ画像を移動させるプログラムを作成していきます。
移動速度を(32,0)とすることにより、右へ移動したのであれば、(-32,0)にすれば左、(0、-32)なら上、(0,32)なら下に移動します。
後は方向キーを押したときの動作に移動速度を設定すれば完了です。
ただ、画像切り替え処理のところではX座標の移動しかコードを記述していませんでしたから、上下を押しても変化しません。
よって、上下も変化するようにコードを追加しておく必要があります。
アニメーションその5のコードをちょっと変更するだけでカーソルキーと連動させることができます。
コードは↓のような感じです。
Public Class Form1
(省略)
Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
Dim g As Graphics = e.Graphics
Dim nowTime As Double = swatch.ElapsedMilliseconds / 1000.0 'Paintメソッドを実行した瞬間の時間
Dim elapsedTime As Double = nowTime - lastTime '経過時間
lastTime = nowTime
'画像切り替え処理
iNo = CInt(Fix((nowTime * 2) Mod 4.0F))
loc.X += vel.X * CSng(elapsedTime) 'X座標の移動
loc.Y += vel.Y * CSng(elapsedTime) 'Y座標の移動
'画像描画処理
g.DrawImage(img, loc.X, loc.Y, imgRect(direct, iNo), GraphicsUnit.Pixel)
Me.Invalidate() '強制再描画
End Sub
Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
Select Case e.KeyCode
Case Keys.Up
direct = Direction.up
vel = New PointF(0, -32) '上へ32ピクセル/秒
Case Keys.Down
direct = Direction.down
vel = New PointF(0, 32) '下へ32ピクセル/秒
Case Keys.Left
direct = Direction.left
vel = New PointF(-32, 0) '左へ32ピクセル/秒
Case Keys.Right
direct = Direction.right
vel = New PointF(32, 0) '右へ32ピクセル/秒
End Select
End Sub
End Class
(省略)
Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
Dim g As Graphics = e.Graphics
Dim nowTime As Double = swatch.ElapsedMilliseconds / 1000.0 'Paintメソッドを実行した瞬間の時間
Dim elapsedTime As Double = nowTime - lastTime '経過時間
lastTime = nowTime
'画像切り替え処理
iNo = CInt(Fix((nowTime * 2) Mod 4.0F))
loc.X += vel.X * CSng(elapsedTime) 'X座標の移動
loc.Y += vel.Y * CSng(elapsedTime) 'Y座標の移動
'画像描画処理
g.DrawImage(img, loc.X, loc.Y, imgRect(direct, iNo), GraphicsUnit.Pixel)
Me.Invalidate() '強制再描画
End Sub
Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
Select Case e.KeyCode
Case Keys.Up
direct = Direction.up
vel = New PointF(0, -32) '上へ32ピクセル/秒
Case Keys.Down
direct = Direction.down
vel = New PointF(0, 32) '下へ32ピクセル/秒
Case Keys.Left
direct = Direction.left
vel = New PointF(-32, 0) '左へ32ピクセル/秒
Case Keys.Right
direct = Direction.right
vel = New PointF(32, 0) '右へ32ピクセル/秒
End Select
End Sub
End Class
これでカーソルキーを押した方向に移動するプログラムができました。
ただ、このままでは常に移動し続けてしまうプログラムになっていますから、そこを修正していく必要があります。
やはりカーソルキーを1回押したら、1コマだけ移動するべきです。
勝手に2コマも3コマも移動するのは違和感があります。
ということで、次回は1コマだけ入力された方向に移動させるプログラムを作成していきます。
0件のコメント
コメントの投稿
0件のトラックバック
- トラックバックURL
- http://hinagis.blog33.fc2.com/tb.php/29-8239149a
- この記事に対してトラックバックを送信する(FC2ブログユーザー)



