月別アーカイブ: 2015年3月

進捗報告 – マップの作成

システム面の作成段階で割と悩んだのはマップの作成方法についてです。マップチップを使った方法ではマップエディタ(またはそれに類する編集手段)を作成する必要があるのですが、ゲーム内にどう組み込むかという問題もあり、操作性のいいエディタを作成するのはなかなか難しいです(現に数回心が折れてる)。

以前まで採用していた「ベクターグラフィックスとHitTest関数を使った作成法」は非常に実装が簡単ですが、

  • 床の法線や情報(素材によって足音が変わる、とか)を取得することが困難
  • 厳密な当たり判定が取れない
  • グラフィック面がチープになる(繰り返しのパターンなどを動的に描画できない)

などの問題があります。

sdpo_progress_map_daydream
過去作DayDreamでのマップ。床のテクスチャはビットマップによる塗りつぶし(手作業)で表現

それを踏まえて、今回は「コンポーネント・ムービークリップのクラス情報を利用した動的生成」という手法を取ることにしました。具体的な手順は以下のとおりです。

  1. マップとなるムービークリップ上に配置したいムービークリップをFlash CS4でマウスでグリグリ配置し、swcとして書き出す
  2. 各オブジェクトを表すクラス(「岩」とか「木」とか)とムービークリップを紐付ける(抽象メソッドでクラスを返すようにしています)
  3. 紐付けに従ってマップロード時にオブジェクトを生成する

sdpo_progress_map_editer
1. でのマップ。床(紫色)はコンポーネントのパラメータで属性(「雪原の床」とか)を指定

sdpo_progress_map実際に生成されたマップ。木は「雪原の床」クラスで初期化時に動的生成

sdpo_progress_map_snowedge
「雪原の床」の単位タイル。床の動的生成時にはこれをちょうどいい間隔で拡大縮小して敷き詰める

これによって適当にオブジェクトを配置するだけでそれっぽいマップを作ることができ、作者のモチベーションが保たれます。

進捗報告 – アイテムとかイベントとか

月一更新と言っておきながらうっかり2ヶ月放置してたので制作の様子を置いておきます。

sdpo_progress_item アイテムまわりのUI。電気・液体の概念を実装しているので、エナジードリンクをポリタンクから飲んだりソーラーパネルでLEDを点けたり出来ます。

アイテムはcsvでちまちま管理してます。

sdpo_progress_craft工作システム(レシピはテスト用)。書籍を買うと行えるようになります。(画像には載ってないけど)素材の他に工具が必要になるレシピもあります。

sdpo_progress_eventイベント(明示的に日本人が出てくるゲームを作るのは初めてなような気が……)。イベントは独自の簡易言語で記述しています。

上には出てないですが、道具・装飾品の装備、買い物、攻撃(?)なども実装しています。

目下の悩みは、アイテムのクラスの管理についてです。イベントやレシピ等ではアイテムはアイテムID(傘なら”kasa”等)で記述されていて適宜クラス(Kasa等)でnewしたりするのですが、クラスがコンパイル時にどこかでimportされていないとそもそもクラスがswf内に入らなくなります。今はアイテムの全クラス(27個)を名前だけ列挙して無理矢理入れてるのですが、アイテムが増えたらどうなるのやら……