Entries

Ads by Google

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

-件のコメント

コメントの投稿

新規
投稿した内容は管理者にだけ閲覧出来ます

-件のトラックバック

トラックバックURL
http://hinagis.blog33.fc2.com/tb.php/36-bded5e12
この記事に対してトラックバックを送信する(FC2ブログユーザー)

マップチップ その3

今回はマップチップ その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

このクラスの作成ポイントは、FormのPaitメソッドで記述されいていた部分を2つのメソッドに分けているところでしょうか。
別に1つのメソッドでもいいんですが、描画位置計算処理と画面描画処理は役割が違いますので分けることにしました。

あとはこのクラスをマップチップ その2のフォームクラスと合体していけばいいだけです。

0件のコメント

コメントの投稿

新規
投稿した内容は管理者にだけ閲覧出来ます

0件のトラックバック

トラックバックURL
http://hinagis.blog33.fc2.com/tb.php/36-bded5e12
この記事に対してトラックバックを送信する(FC2ブログユーザー)

Appendix

最新記事

検索フォーム

月別アーカイブ

売れ筋ランキング

お楽しみ用

アニメグッズ

プロフィール

Author:ひなぎ
VB2005&2008でゲーム作成中

FC2カウンター

Powered By FC2ブログ

今すぐブログを作ろう!

Powered By FC2ブログ

FC2ブログ