ここまでの冒険を記録しますか?

長岡技大ソフトウェア開発サークルの開発ブログ

【ゲーム製作入門】C/C++で簡単なRPGを作る⑥【DXライブラリ】

書き手:肥田野

DXライブラリでRPGのベースになるマップ画面やデータ管理などのあれこれの制作に挑戦してみます。

RPGとして完成する保証はありませんが、途中経過だけでも参考になれば幸いです。

この連載は前回までの内容を理解していることを前提に進めていきます。

前回CSVファイルの使い方を解説したので、今回はそれを応用してもう一つ情報を追加します。

追加するのは、そのマスをプレイヤーが歩行可能かどうかという情報です。

続きを読む

【ゲーム製作入門】C/C++で簡単なRPGを作る⑤【DXライブラリ】

書き手:肥田野

DXライブラリでRPGのベースになるマップ画面やデータ管理などのあれこれの制作に挑戦してみます。

RPGとして完成する保証はありませんが、途中経過だけでも参考になれば幸いです。

この連載は前回までの内容を理解していることを前提に進めていきます。

今回は外部からファイルを読み込んで、プログラムに反映させる方法について解説します。

続きを読む

【ゲーム製作入門】C/C++で簡単なRPGを作る④【DXライブラリ】

書き手:肥田野

DXライブラリでRPGのベースになるマップ画面やデータ管理などのあれこれの制作に挑戦してみます。

RPGとして完成する保証はありませんが、途中経過だけでも参考になれば幸いです。

この連載は前回までの内容を理解していることを前提に進めていきます。

前回プレイヤーの歩行を実装できたので、今度はマップ画面を描画する準備をします。

続きを読む

【ゲーム製作入門】C/C++で簡単なRPGを作る③【DXライブラリ】

書き手:肥田野

DXライブラリでRPGのベースになるマップ画面やデータ管理などのあれこれの制作に挑戦してみます。

RPGとして完成する保証はありませんが、途中経過だけでも参考になれば幸いです。

この連載は前回までの内容を理解していることを前提に進めていきます。

前回はプレイヤーの歩行アニメーションを実装したので、今回は実際に座標を動かしてみます。

今回説明するコードです。今回もPlayer.hのみになります。

続きを読む

Tiled Map Editorの使い方

筆者:J

Tiled Map Editor とは

ゲームでよく使うMapを簡単に作るためのツール
RPGのマップ・アクションゲームのステージ・ただの背景のどれにも使える.
インストールが必要.

Tiled Map Editorのサイト http://www.mapeditor.org/

記事中で使ったタイルセット http://opengameart.org/content/lpc-tile-atlas

  • 「タイルセット」と「マップチップ」は言葉の違いのみ.

f:id:NUT_SoftwareDevelopper:20150505230647j:plain

使い方

  • 起動
  • 「ファイル」→「新しいファイル」
    • タイルの出力形式をCSV
    • マップの大きさを適当に

f:id:NUT_SoftwareDevelopper:20150505231439j:plain

  • 「マップ」→「新しいタイルセット」

    • パスにタイルセットに使う画像ファイルを指定.
    • 画像ファイルの設定に合わせてタイル幅,高さを指定.
      • 今回のタイルセット(base_out_atlas, terrain_atlas)は32px*32px
    • 複数枚のタイルセットを使っていい.
  • 「レイヤー」→「タイル・レイヤーの追加」

    • RPGのマップとして使うなら「床」・「オブジェクト」・「当たり判定」の3つは欲しい.必要に応じてイベントレイヤーなども加える.
  • あとはペイント感覚でペタペタする.

    • タイルセットはドラッグでまとめて選択できる.
    • ランダムモード,塗りつぶし,消しゴムが使える.

f:id:NUT_SoftwareDevelopper:20150505235848j:plain f:id:NUT_SoftwareDevelopper:20150506001112j:plain

  • 「ファイル」→「名前を付けて保存」

    • Tiledマップファイル(.tmx)形式で保存する.
  • 保存ファイルをプログラマ向けのテキストエディタで開く.メモ帳などでは改行形式が違うため適切に表示されない.

    • 自分はNotePad++をよく使う.
  • Sample.tmx の中身

<?xml version="1.0" encoding="UTF-8"?>
<map version="1.0" orientation="orthogonal" renderorder="right-down" width="12" height="12" tilewidth="32" tileheight="32" nextobjectid="1">
 <tileset firstgid="1" name="terrain_atlas" tilewidth="32" tileheight="32">
  <image source="terrain_atlas.png" width="1024" height="1024"/>
  <tile id="561">
   <objectgroup draworder="index">
    <object id="0" x="8" y="13" width="13" height="15"/>
    <object id="0" x="40" y="44"/>
   </objectgroup>
  </tile>
 </tileset>
 <tileset firstgid="1025" name="base_out_atlas" tilewidth="32" tileheight="32">
  <image source="base_out_atlas.png" width="1024" height="1024"/>
 </tileset>
 <layer name="床" width="12" height="12">
  <data encoding="csv">
514,515,516,514,515,516,514,515,516,514,515,516,
546,547,548,546,547,548,546,547,548,546,547,548,
578,579,580,578,579,580,578,579,580,578,579,580,
514,515,516,514,515,516,514,515,516,514,515,516,
546,547,548,546,547,548,546,547,548,546,547,548,
578,579,580,578,579,580,578,579,580,578,579,580,
514,515,516,514,515,516,514,515,516,514,515,516,
546,547,548,546,547,548,546,547,548,546,547,548,
578,579,580,578,579,580,578,579,580,578,579,580,
514,515,516,514,515,516,514,515,516,514,515,516,
546,547,548,546,547,548,546,547,548,546,547,548,
578,579,580,578,579,580,578,579,580,578,579,580
</data>
 </layer>
 <layer name="オブジェクト" width="12" height="12">
  <data encoding="csv">
0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,
0,0,926,927,928,0,0,0,0,0,0,0,
0,0,958,959,960,0,0,0,0,0,0,0,
0,0,990,991,992,0,0,1277,1278,0,0,0,
0,0,1022,1023,1024,0,0,1309,1310,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0
</data>
 </layer>
 <layer name="当たり判定" width="12" height="12">
  <data encoding="csv">
0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,
0,0,1019,1019,1019,0,0,0,0,0,0,0,
0,0,1019,1019,1019,0,0,0,0,0,0,0,
0,0,0,1019,0,0,0,0,1019,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0
</data>
 </layer>
</map>
  • 重要なのはtilesetタグ.

    • firstgidがそのタイルセットの左上のタイルのIDとなっている.
    • 1枚目のタイルセットが 1 から始まっている点に特に注意.
    • 2枚目以降は連番になっている.
  • あとは,dataタグの中身をコピペなりなんなりして使うことができる.

タイルセットの入手法

http://opengameart.org/ のサイトではゲーム用画像素材,音楽素材を投稿・配布している.
ライセンスは複数あるが,CC-BY,GPLを含むなら営利目的での利用も可能.(要精査)

お気に入りランキングでソートなどもできる.

http://opengameart.org/art-search-advanced?keys=&field_art_type_tid[]=9&field_art_tags_tid_op=and&field_art_tags_tid=&name=&sort_by=count&sort_order=DESC&items_per_page=24&Collection=

f:id:NUT_SoftwareDevelopper:20150505230654j:plain

黄色の丸の部分がライセンス.
赤い丸の部分がファイル.

【ゲーム製作入門】C/C++で簡単なRPGを作る②【DXライブラリ】

書き手:肥田野

DXライブラリでRPGのベースになるマップ画面やデータ管理などのあれこれの制作に挑戦してみます。

RPGとして完成する保証はありませんが、途中経過だけでも参考になれば幸いです。

この連載は前回までの内容を理解していることを前提に進めていきます。

第二回は、前回ロードしたプレイヤーのチップ画像でアニメーションをさせる方法について解説します。

続きを読む

【ゲーム製作入門】C/C++で簡単なRPGを作る①【DXライブラリ】

書き手:肥田野

サークルメンバーから要望があったので、DXライブラリでRPGのベースになるマップ画面やデータ管理などのあれこれの制作に挑戦してみます。

RPGとして完成する保証はありませんが、途中経過だけでも参考になれば幸いです。

今回は、SmokingWOLF様の開発されたフリーソフト「WOLFRPGエディター」を参考に作ってみます。

「それなら最初からウディタ使えばいいじゃん」とか「ぶっちゃけウディタの方が高性能で作りたいもの作れる」とかいうのは禁句で(笑) あくまでプログラミングを学ぶことを目的としているので、これも経験としてお付き合いいただければ幸いです。

なお、この連載は前回までのブロック崩しの内容(最終回はこちら)を理解していることを前提に進めていきます。プログラミング初心者に難しそうな箇所は改めて説明しますけどね。

第一回は、下準備としてヘッダファイルの追加とプレイヤーの画像処理方法について解説します。

続きを読む