Entries

マップチップ その1

キャラクターの移動は前回まででできましたので、今回は背景に挑戦です。
通常RPGゲームの背景は一枚の絵ではなく、小さなブロックを組み合わせて一枚の絵を作成しています。
今回はこれにチャレンジします。
といっても、デザイン力はありませんから、グラフィックはシンプルで。
マップ1
イメージとしては、緑が芝、茶色が土、薄橙を砂漠、青を海、水色を川、濃い紫を毒沼とします。

これをRectangle構造体にいれて、マップの配列にマッチするものを表示すればいいわけですね。

まず、Rectangle構造体を作成するわけですが、これはキャラクターのアニメーションと同じやり方でします。
構造体配列を用意して、1枚絵からマップチップを分割し保存します。
ただし、保存されるのは座標だけですので間違えないように。

あとは、画面上に表示するマップの配列を作成してあげればできあがり。

上記の2点が今回のポイントです。
とりあえず、コードは↓のような感じでしょうか。
Public Class Form1
  Dim MapImg As Bitmap = New Bitmap(My.Resources.map) 'マップチップ画像ファイル
  Dim MapRect() As Rectangle = New Rectangle(5) {} 'マップチップRectangle構造体
  Dim MapData(,) As Integer = New Integer(14, 19) _
  {{3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3}, _
  {3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3}, _
  {3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 3}, _
  {3, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 3}, _
  {3, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 3}, _
  {3, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 3}, _
  {3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 3}, _
  {3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3}, _
  {3, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3}, _
  {3, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 5, 5, 0, 0, 0, 0, 3}, _
  {3, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 0, 5, 5, 5, 5, 0, 0, 0, 3}, _
  {3, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 5, 5, 5, 5, 0, 0, 0, 3}, _
  {3, 0, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 5, 5, 0, 0, 0, 0, 3}, _
  {3, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3}, _
  {3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3}} 'マップ配列

  Public Sub New()

    ' この呼び出しは、Windows フォーム デザイナで必要です。
    InitializeComponent()

    ' InitializeComponent() 呼び出しの後で初期化を追加します。
    Me.SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.UserPaint Or ControlStyles.OptimizedDoubleBuffer, True)
    Me.ClientSize = New Size(640, 480)

    Me.MakeMap()
  End Sub

  Sub MakeMap() 'マップチップ構造体を作成
    Dim i As Integer = 0
    For y As Integer = 0 To 1
      For x As Integer = 0 To 2
        MapRect(i) = New Rectangle(x * 32, y * 32, 32, 32)
        i += 1
      Next
    Next
  End Sub

  Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
    Me.Draw(e.Graphics)
    Me.Invalidate()
  End Sub

  Sub Draw(ByVal g As Graphics)
    For y As Integer = 0 To MapData.GetUpperBound(0)
      For x As Integer = 0 To MapData.GetUpperBound(1)
        g.DrawImage(MapImg, x * 32, y * 32, MapRect(MapData(y, x)), GraphicsUnit.Pixel)
      Next
    Next
  End Sub
End Class


以上のコードを実行すると、以下のようにマップチップから1枚絵を作成できます。
マップ2

今度は、このマップとキャラクターの合成にチャレンジ。

0件のコメント

コメントの投稿

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

0件のトラックバック

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

Appendix

最新記事

検索フォーム

月別アーカイブ

売れ筋ランキング

お楽しみ用

アニメグッズ

プロフィール

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

FC2カウンター

Powered By FC2ブログ

今すぐブログを作ろう!

Powered By FC2ブログ

FC2ブログ 一戸建て