DXライブラリでステージエディターを実装したお話
こんにちは。えあると申します。
今回は、現在制作中のゲームにステージエディターを実装してみましたので、noteに書き残しておこうと思います。
その前に
今回の実装にもDXライブラリを使用させていただきました。
今回は描画全般、キー入力、マウスの座標取得などあらゆる処理で使用させていただいています。
↓DXライブラリはこちら↓
DXライブラリ置き場
https://dxlib.xsrv.jp/index.html
実装に至った経緯
まずは、そもそもなんでステージエディターを実装したのかというお話を。
理由はシンプルで、
「ステージ作りを楽にしたい」
という、至極当然の理由です。
今回のゲームではステージの読み込みにcsvファイルを使用しています。
それらを編集するにあたって、Excelを使用していました。
しかし、当然実際のゲームの画面とは違うので、ステージの雰囲気や動きを確認しづらかったんです。
さらにExcelで編集するのも直感的でなく、面倒に感じてきて、
「だったら作っちゃえばいい」
と思い立ったわけです。
意識した点
ステージエディターを実装する上で一番意識したのは、ずばり
「デバッグのしやすさ」
という点です。
理由としては、ステージが作ることができるだけでは、「Excelでよくね」となります。
しかし作ったステージをすぐにプレイできることで、トライ・アンド・エラーを繰り返しやすくなって、ステージ作りを効率化できるのではないかと思います。
そのため、今回は画面の左上に「プレイボタン」を配置して、ステージを保存したあとにクリックすることで、今制作したステージを実際に遊ぶことができるようにしました。
実際、かなりの効率化につながったと思います。
つまずいたこと
今回の実装で一番つまずいたのは、
「GetOpenFileName」がカレントディレクトリを変更していることに気づかなかった
という点です。
実装を進める上で、GetOpenFileNameというWindowsのマクロを使用することで、ファイルを開くダイアログを表示することができるとわかりました。しかし、その使用を理解しておらず、一度ファイルを選択するとそれ移行の画像や、音声の読み込みができなくなってしまいました。
ここで頭を悩ませ、実装を辞めるか悩みましたが、
ダイヤログでファイルを開き、ダイヤログで保存先をしていするという
一連の流れを崩したくなかったため、なんとか実装しようと試みました。
そして調べていくうちにわかったのは、このファイルを開く動作をすると、開いたファイルがあるディレクトリがカレントディレクトリに変更されてしまう
ということ。
画像や音声ファイルのパスは、カレントディレクトリからの相対パスを使用していました。
当たり前ですが相対パスで参照している以上は、カレントディレクトリが変更されることで、参照することができなくなります。
これに気づかず、3時間ほど調べていました…
対処法としては、ファイルを開く前にカレントディレクトリを
GetCurrentDirectory を使用して保持しておき、ファイルを開いた後、
SetCurrentDirectory を使用してカレントディレクトリをもとの場所に戻すという処理を実装することで回避することができました。
まとめ
ステージエディターを実装した事によるメリットは大きく、
自分でステージを作るのも楽になるし、
ユーザーにステージを作ってもらうこともできるわけです。
win-winの関係を作ることができるものになったと思います。
しかも今回のステージエディターはcsvを利用したものですので、
今後のゲームに再利用することもできるでしょう。
ツールというのは財産になるのだと実感しました。
ツールを作ることの楽しさと、それによっての効率化。
ツール作り…夢が広がります……