自作ゲーム用MapEditor

アバター
gont
記事: 1
登録日時: 14年前
住所: 埼玉県

自作ゲーム用MapEditor

投稿記事 by gont » 14年前

はじめまして、gontです。

mixC++にユーザ登録をしたので、せっかくなので日記を書いてみようと思いました。
何を書こうかちょっと悩みましたが、最近作った自作ゲーム用のMapEditorについて書くことにしました。

皆さんはプログラミングをして何かを作成するとき、こんなツールがあったら役に立つだろうな、と思ったことはありますか?
僕は今、2Dの横スクロールアクションゲームを作っているのですが、作成を進めていくうちに、
ステージを作成する為のMapEditorがあったらどんなに便利だろうと感じるようになりました。

初めのうちは、フリーのMapEditorをダウンロードしてそれを使って満足していました。
しかし、使っているうちに細かいところが気になりだしてしまいました。(こんな機能が欲しいなぁ等)

この際、自分専用のEditorを作ってしまったらどうだい?と思い、MapEditorの作成にとりかかることにしました。
Excelを立ち上げ、画面のレイアウトはこうで、こんなボタンがココにあって、これを押すとあーなって…等、
ルンルン気分で仕様を書いていきました。

ある程度考えているモノのイメージを書けたところで、満足しながら自分の書いた設計図を眺めていましたが、
高揚した気分が冷めていくと共に押し寄せる絶望感。

「で、コレはどうやって作ればいいの?」と。

ネットや本で調べたところ、グラフィカルなアプリケーション(?)を作成するにはC#が相性が良いということがわかりました。
さっそくC#の入門用の書籍を購入し、Visual C# 2008 Express Editionをインストールして作成を開始しました。
格闘すること1~2週間、当初予定していた仕様を大幅に削ったモノ(おぃw)が完成しました!
MapEditor.png
MapEditor.png (63.02 KiB) 閲覧数: 265 回
左側のツリーには作成したMAPデータが表示されており、これをクリックするとデータが読み込まれるようになっています。
上の方にも色々ありますが、ファイル(新規作成、読み込み、保存)、レイヤー(4層)、編集モード(1マス単位、四角形、バケツ)、倍率(等倍、1/2倍、1/4倍)、Gridボタン(枠線の表示/非表示)これらを除いた機能は挫折してしまい未実装です。

右側にはマップチップが表示されており、選んだチップを配置していくことができます。
マップチップが描かれた1つのpngデータを32*32で分割しています。
チップの追加の度に少しだけソースをいじる必要があります。

コレで作成されたデータは、マップ名.mapで保存されます。(中身は文字や数字を','で区切っただけのもの)

実際にゲームで読み込むとこのような感じになります。
game1.png
game1.png (53.47 KiB) 閲覧数: 275 回
一応、必要最低限の動作はしてくれるので完成ということにしてありますが、気になっている部分があります。

・自分のメインPCでしか動かない
いきなり致命的ですね。(笑)原因はおそらく、ファイルのパスの書き方(ツリー表示の部分?)と、画面のサイズ等だと思います。
まぁ、もともと自分専用ということで作ったので気にしなくても良いとは思うのですが、
ごく一部の環境でしか動作しないプログラムってのは、ちょっぴり寂しいような気がしますね。

・マップチップの敵のサイズと実際の敵のサイズが異なる
こちらでは敵さんのサイズは32*32ですが、実際のゲームでは64*64です。
なので、地面や壁に隣接するような配置をしてしまうと、敵がめり込んでしまいます。
merikomi.png
merikomi.png (54.24 KiB) 閲覧数: 273 回
直そうかと思ったのですが、いまいちうまい方法が思いつかないので放置しています。

・アンドゥ/リドゥができない
これはかなり問題です。
細かいところまで気を配って作成したMAPを、バケツで間違った部分を塗りつぶしてしまった場合に元に戻せなくなってしまいます。
アンドゥ/リドゥの仕組みがよくわからないので、あきらめました。

・下層・上層レイヤーが表示されない
その時に編集しているレイヤーの情報しか表示されません。
別の層のレイヤーで配置したオブジェクトを確認するためには、わざわざそのレイヤーに切り替えないといけません。
これも、できれば直したかった…。

他にも、細かい部分を上げるとキリがない程問題を抱えていますが、
自分にしては中々上出来ではないかと思っており、気に入ってます。
そして何より、作っていて楽しかったです。(設計図を書いているときが一番楽しかったですw)

気が向いたら、別のツールも作ってみたいと思います。

最後に

mixC++をいつも楽しく利用させていただいております。
(僕にはこれといった得意分野や知識がないので、掲示板などを眺めているだけですが)
プログラミングを頑張っている方々や、困っている方に様々なアドバイスをする方など、
皆さんのやりとりを見ているだけで、自分も頑張らねばならねぇな、という気分になります。

今後も、日記等をこっそり書くかもしれません。
その時はまた、読んでいただけると嬉しいっス。

ではでは。

-MEMO-
以下、参考にしたサイト(一部)です。

Javaでゲーム作りますが何か? - 人工知能に関する断創録
・マップエディタのサンプルが素晴らしいです。真似して作成させていただきました。
マップエディタの他にも、かなり参考になるサンプルがたくさんあります。

C#の庭園
・C#の使い方が解説されています。(もう無くなってしまった?)

@IT NET TIPS TreeViewコントロールへ項目を追加するには?
・ツリー表示、とても難しかったです。

数学アルゴリズム演習ノート 領域の塗りつぶしアルゴリズム
・バケツツールを作成する際に参考にしました。

アバター
BEAT
記事: 4
登録日時: 15年前

Re: 自作ゲーム用MapEditor

投稿記事 by BEAT » 14年前

gontさんじゃないですか!お久しぶりです!
ツール作りは制作の効率化にもつながりますしとてもいいことだと思います

C#はVBのC言語バージョン的なことを聞いたことがありますが。自分もちょっと触ってみようかな・・・

敵の出現位置を固定するのはマップチップと同じことをするよりスクリプトのほうがいいことに最近気が付きました。
敵用マップチップで視覚的に配置し、テキストファイルとかで敵キャラの番号と座標を出力していくようなツールを作るといいと思います。

こっちのほうでもよろしくお願いします(_ _)

アバター
gont
記事: 1
登録日時: 14年前
住所: 埼玉県

Re: 自作ゲーム用MapEditor

投稿記事 by gont » 14年前

お久しぶりです!
BEAT さんが書きました: 敵の出現位置を固定するのはマップチップと同じことをするよりスクリプトのほうがいいことに最近気が付きました。
敵用マップチップで視覚的に配置し、テキストファイルとかで敵キャラの番号と座標を出力していくようなツールを作るといいと思います。
スクリプトというと、例えばLua等ですかね?
マップはマップで別に作って、敵はまたそれ専用のツールで配置していくようなイメージでしょうか?

BEATさんの過去の日記も少し読んだのですが、学校での制作活動等頑張っているようですね!
なんだか楽しそうでうらやましいなぁw

こちらでも、よろしくお願いしますね。
C#、僕にはまだ全然使いこなせませんが、オススメっスよ!

アバター
BEAT
記事: 4
登録日時: 15年前

Re: 自作ゲーム用MapEditor

投稿記事 by BEAT » 14年前

gont さんが書きました: スクリプトというと、例えばLua等ですかね?
マップはマップで別に作って、敵はまたそれ専用のツールで配置していくようなイメージでしょうか?
Luaはよくおすすめされますが、触ったことないのでよくわかりませんw
マップチップサイズとマップチップを置いた場所から座標を、置いたマップチップから敵の識別コードを読み取り
何らかのファイル(マップデータとは別に)に出力すればどうですか、といいたかったんです。

でもよく考えたらマップチップと同じことしたほうがサイズ的にはいいですね。

でもマップデータは全体に意味がありますが、敵のデータは「配置しない場所」が多いと
ループで読み込む時にループ回数が増えちゃうから必要な数のデータだけ出力したほうがいいかなと思いました。

その辺はお好みでしょうかね。

チーム制作は楽しいですがしんどいことも多いです。
でもみんなで話し合って面白いものを作ろうと頑張るのがとても楽しいですよ