素人がゲームプログラム作成に挑戦
ゲームを買うお金がないから、ゲームを作るというゲームに挑戦!言語はVisual Basic(VB)をメインにC++、C#、Javaは参考程度
Entries
新しい記事を書く事で広告が消せます。
- --------
- カテゴリ : スポンサー広告
- コメント : -
- トラックバック : -
-件のコメント
コメントの投稿
-件のトラックバック
- トラックバックURL
- http://hinagis.blog33.fc2.com/tb.php/36-bded5e12
- この記事に対してトラックバックを送信する(FC2ブログユーザー)
マップチップ その3
- ジャンル : コンピュータ
- スレッドテーマ : Visual Basic
今回はマップチップ その2の続きで、キャラクタクラスを作成し、合体していきます。
キャラクタクラスの元になるのはアニメーション その7までに作ったフォームです。
このフォームクラスの中にあるキャラクタに関する部分だけを取り出してしまえばキャラクタクラスの出来上がりです。
このクラスの作成ポイントは、FormのPaitメソッドで記述されいていた部分を2つのメソッドに分けているところでしょうか。
別に1つのメソッドでもいいんですが、描画位置計算処理と画面描画処理は役割が違いますので分けることにしました。
あとはこのクラスをマップチップ その2のフォームクラスと合体していけばいいだけです。
キャラクタクラスの元になるのはアニメーション その7までに作ったフォームです。
このフォームクラスの中にあるキャラクタに関する部分だけを取り出してしまえばキャラクタクラスの出来上がりです。
Public Class CharaClass
Enum Direction
down = 0 '前向き
up = 1 '後ろ向き
left = 2 '左向き
right = 3 '右向き
End Enum
Dim img As Bitmap = New Bitmap(My.Resources.anime6) 'スプライト画像
Dim imgRect(,) As Rectangle '画像矩形配列
Dim iNo As Integer '表示画像インデックス
Dim direct As Direction
Dim position As Point '画像表示座標ブロック
Dim locate As PointF '画像表示座標
Dim destination As PointF '目的座標
Dim velocity As PointF '移動速度
Dim MoveFlg As Boolean
Public Sub New(ByVal px As Integer, ByVal py As Integer)
imgRect = New Rectangle(3, 3) { }
For y As Integer = 0 To imgRect.GetUpperBound(0)
For x As Integer = 0 To imgRect.GetUpperBound(1)
imgRect(y, x) = New Rectangle(x * 32, y * 32, 32, 32)
Next
Next
iNo = 0
direct = Direction.down '前向き
position = New Point(px, py) '初期位置
locate = New PointF(position.X * 32, position.Y * 32)
destination = locate
velocity = New PointF(0, 0)
End Sub
Public Sub Update(ByVal nowTime As Double, ByVal elapsedTime As Double) '更新処理
iNo = CInt(Fix((nowTime * 2) Mod 4.0F))
If MoveFlg Then
locate.X += velocity.X * CSng(elapsedTime)
locate.Y += velocity.Y * CSng(elapsedTime)
Select Case direct
Case Direction.up
If locate.Y <= destination.Y Then
position.Y -= 1
locate.Y = position.Y * 32
MoveFlg = False
End If
Case Direction.down
If locate.Y >= destination.Y Then
position.Y += 1
locate.Y = position.Y * 32
MoveFlg = False
End If
Case Direction.left
If locate.X <= destination.X Then
position.X -= 1
locate.X = position.X * 32
MoveFlg = False
End If
Case Direction.right
If locate.X >= destination.X Then
position.X += 1
locate.X = position.X * 32
MoveFlg = False
End If
End Select
End If
End Sub
Public Sub Draw(ByVal g As Graphics) '描画処理
g.DrawImage(img, locate.X, locate.Y, imgRect(direct, iNo), GraphicsUnit.Pixel)
End Sub
Public Sub KeyDown(ByVal k As Keys) 'キー入力処理
If MoveFlg = False Then
Select Case k
Case Keys.Up
direct = Direction.up
velocity = New PointF(0, -32)
MoveFlg = True
Case Keys.Down
direct = Direction.down
velocity = New PointF(0, 32)
MoveFlg = True
Case Keys.Left
direct = Direction.left
velocity = New PointF(-32, 0)
MoveFlg = True
Case Keys.Right
direct = Direction.right
velocity = New PointF(32, 0)
MoveFlg = True
End Select
destination = New PointF(locate.X + velocity.X, locate.Y + velocity.Y)
End If
End Sub
End Class
Enum Direction
down = 0 '前向き
up = 1 '後ろ向き
left = 2 '左向き
right = 3 '右向き
End Enum
Dim img As Bitmap = New Bitmap(My.Resources.anime6) 'スプライト画像
Dim imgRect(,) As Rectangle '画像矩形配列
Dim iNo As Integer '表示画像インデックス
Dim direct As Direction
Dim position As Point '画像表示座標ブロック
Dim locate As PointF '画像表示座標
Dim destination As PointF '目的座標
Dim velocity As PointF '移動速度
Dim MoveFlg As Boolean
Public Sub New(ByVal px As Integer, ByVal py As Integer)
imgRect = New Rectangle(3, 3) { }
For y As Integer = 0 To imgRect.GetUpperBound(0)
For x As Integer = 0 To imgRect.GetUpperBound(1)
imgRect(y, x) = New Rectangle(x * 32, y * 32, 32, 32)
Next
Next
iNo = 0
direct = Direction.down '前向き
position = New Point(px, py) '初期位置
locate = New PointF(position.X * 32, position.Y * 32)
destination = locate
velocity = New PointF(0, 0)
End Sub
Public Sub Update(ByVal nowTime As Double, ByVal elapsedTime As Double) '更新処理
iNo = CInt(Fix((nowTime * 2) Mod 4.0F))
If MoveFlg Then
locate.X += velocity.X * CSng(elapsedTime)
locate.Y += velocity.Y * CSng(elapsedTime)
Select Case direct
Case Direction.up
If locate.Y <= destination.Y Then
position.Y -= 1
locate.Y = position.Y * 32
MoveFlg = False
End If
Case Direction.down
If locate.Y >= destination.Y Then
position.Y += 1
locate.Y = position.Y * 32
MoveFlg = False
End If
Case Direction.left
If locate.X <= destination.X Then
position.X -= 1
locate.X = position.X * 32
MoveFlg = False
End If
Case Direction.right
If locate.X >= destination.X Then
position.X += 1
locate.X = position.X * 32
MoveFlg = False
End If
End Select
End If
End Sub
Public Sub Draw(ByVal g As Graphics) '描画処理
g.DrawImage(img, locate.X, locate.Y, imgRect(direct, iNo), GraphicsUnit.Pixel)
End Sub
Public Sub KeyDown(ByVal k As Keys) 'キー入力処理
If MoveFlg = False Then
Select Case k
Case Keys.Up
direct = Direction.up
velocity = New PointF(0, -32)
MoveFlg = True
Case Keys.Down
direct = Direction.down
velocity = New PointF(0, 32)
MoveFlg = True
Case Keys.Left
direct = Direction.left
velocity = New PointF(-32, 0)
MoveFlg = True
Case Keys.Right
direct = Direction.right
velocity = New PointF(32, 0)
MoveFlg = True
End Select
destination = New PointF(locate.X + velocity.X, locate.Y + velocity.Y)
End If
End Sub
End Class
このクラスの作成ポイントは、FormのPaitメソッドで記述されいていた部分を2つのメソッドに分けているところでしょうか。
別に1つのメソッドでもいいんですが、描画位置計算処理と画面描画処理は役割が違いますので分けることにしました。
あとはこのクラスをマップチップ その2のフォームクラスと合体していけばいいだけです。
0件のコメント
コメントの投稿
0件のトラックバック
- トラックバックURL
- http://hinagis.blog33.fc2.com/tb.php/36-bded5e12
- この記事に対してトラックバックを送信する(FC2ブログユーザー)



