昨年、『理想のマップエディタを求めて』(※1)というタイトルで会誌の記事を書かせていただきました、古川です。今回、『続』という文字がタイトルに含まれるということから、現在の状態を比較的容易に想像できることと思われます。
…そうです、まだ完成してません。
しかし、着実に進歩はしています。
そんな、なかなか完成しないマップエディタについて、いろいろと書き連ねてみようと思います。
記憶を頼りに以下の表を書いてます。思い違いは多々あるかもしれません。
開発を再開しようと思ったとき、そこにはこれらの問題がありました。
旧バージョンでは、既にマップを表示するところまでは進んでいました。しかし、残念ながらその次の段階である、「編集」まで進むことが出来ませんでした。
理由は明確です。プログラムがマップの編集を考えた構造をしていなかったのです。
例えば、マップ上でマウスをドラッグすると、対応するマップチップがどんどん置かれていくとしましょう。しかし、
…などと、考えることが山ほどでてきました。そして旧バージョンのプログラムでは、これらを解決する方法を考慮していなかったのです。
無理やりこれらの機能を実現しようとすると、様々なところでプログラムが破綻するのは目に見えていました。したがって、全体を一度見直し、新たに作り直すことが重要であると考えたのです。
問題はもうひとつありました。旧バージョンのマップ描画UI(ユーザインターフェース)には、レイヤーが2枚までしか重ね合わせ出来ないという欠点がありました。最初にこれを書いていた当時は、描画速度の向上を目論んで2枚までに制限したものと思われます。
しかし、よく考えればレイヤーの枚数を増やせばそれだけ描画速度が低下するのはあたりまえの話で、描画速度の向上を目指すのにレイヤーの枚数を制限するのは、最適化の方向性が違っていたといえます。それに、レイヤーを多層にすることで多彩な表現の可能性があることを見出しました。例えば、グリッドの表示です。レイヤーとしてマップチップの一つ一つに枠を描画すれば、それはグリッドになります。
このようなことから、マップ描画UIは多層レイヤー対応にすることに決め、一から新しく書き起こすことにしました。
マップファイルフォーマットを自由に決めるために必要なプラグインですが、旧バージョンではデータ構造自身を記述するという方針でした。今回は方向性を変えて、データ構造は単純に、編集機能を抽象化する方針をとることにしました。したがって、データ構造を定義するものと、編集機能を定義するものの2種類のプラグインを用意しました。
データ構造については昨年話しましたので、ここでは編集機能について説明します。編集機能とは、グラフィックエディタなどにある「ペン」、「矩形描画」、「塗りつぶし」などの機能、いわゆるツールボックスを指します。単純なデータ構造に対しては、プログラム本体側で用意される編集機能を用いればプラグイン開発の手間を少なくできます。逆に特殊な編集機能が必要なデータ構造に対しては、その編集機能をプラグインとして用意することによって、対象のデータを編集できるようになります。
前述の通り、多層レイヤーの表示が可能になりました。ここで、表示および編集するレイヤーの選択をリストコントロールなどの標準コントロールで行おうと思っていましたが、要求を満たす標準コントロールが見つからなかったので、ついカッとなって自作のUIを作ってしまいました。後悔はしていません。
ここで、現在のプログラムの規模が気になったので、調べてみました。その結果が以下の表です。
モジュール | ファイル数 | 行数 | 文字数 |
---|---|---|---|
プログラム本体 | 10 | 1,928 | 56,259 |
プラグインベース | 7 | 615 | 11,369 |
マップ描画UI | 21 | 4,235 | 100,127 |
リスト表示UI | 1 | 857 | 18,201 |
サンプルプラグイン | 5 | 1,173 | 40,487 |
合計 | 44 | 8,808 | 226,443 |
表を見ると、かなり大規模になってしまったということがわかります。これだけ大規模なプログラムになると、それぞれのプログラムの部品を上手いこと協調動作させ、プログラムとして正しく動作させるのは至難の業です。
そのため、実際にコーディングを行う前に、自分の作りたいものをはっきりとさせておく必要があるでしょう。ただ、個人ベースで制作するものですので、ちゃんとした仕様書は必要ないでしょうが、これから作るものの簡単なメモを書いておくといいかもしれません。これは実際に紙に書くということが重要だと思われます。ちなみに、チラシの裏など、ばらばらになってしまうのはなくす可能性が大きいのでNGです。書くならノートやらくがき帳などがいいでしょう。紙にいろいろと書いているうちに自分の頭の整理もできますので、プログラマの方はぜひメモ書きをやってみることをオススメします。
サークルでゲームなどを一度も完成させたことのない自分が偉そうに書くのもなんですが、マップエディタについては時間がかかっても着実に完成に近づくように努力していこうと思います(※2)。最後までお読みいただきありがとうございました。
(2004/10/03 古川 史幸)