2009-04-08 6 views
9

私は古典的なウルティマシリーズの静脈の中にある小さなオーバーヘッドビューのRPGを書いています。 1000タイル×1000タイルと言ってもいいでしょう。大規模なマップを設計するための迅速で汚れた(もっと汚いよりも速い)方法が必要です。ゲームマップを構築する最善の方法

私はタイルの良い50-60さまざまな種類があると言うだろう - など、森、川、平野、

これまでのところ、私が思い付くことができる最高は

  • 定義しました2つの重要な情報(位置/座標識別子)と、それがどのタイプのタイルであるかを定義する1-60の整数を保持する配列(または同様の構造)。

  • ラスタ編集アプリケーションでは、1000px x 1000pxの画像を描画します。 50種類の色のパレットを使用して、マップを描画します.1ピクセルは1タイルに対応します。与えられた水のタイルを言って、私は青の特定の色合いのピクセルのグループを描画します。 .gifまたは.png形式で保存します。

  • 上記のgif/jpgを解析し、それをピクセル単位で分析するプロセッサを作成します。ピクセルのRGB値に応じて、タイルタイプが決定されます。次に、プロセッサはマップ配列を生成するルーチンをコード生成します。

これまでのところ、もっと簡単な方法が必要だと思っています。

答えて

3

するTryはsourceforge:http://sourceforge.net/search/?type_of_search=soft&words=tile+editor

これらのエディタのいくつかは、あなたが好きなようにあなたがあなたのゲームに引き出すことができるいくつかの標準的な形式に出て保存されます。

TileStudioは、あなたのエンジンに直接コンパイルすることができても、出力ヘッダ/ソースファイルでしょう(あなたのニーズが何であるかわからない)

2

は、私にはかなり良い方法のようですね。ただし、カスタムマップビルダーを作成するだけで簡単に作成できます。

もう1つの選択肢は、主要な機能の位置を定義するだけのプログラムを書くことで、残りの部分はジェネレータプログラムによって埋められます。 (例:x1、y1からx2、y2への河川、x、yなどを中心とした「大」)。これにより、地理的特徴のより小さなファイルから大きな地図を定義することができます。ラスターの最後のピクセルをすべて指定するのではなく、ベクトル描画を行うようなものだと考えてください。 :-)

11

タイルベースである必要がありますか? 、ダニエル・クックのサイトを見てみましょうLost Garden、彼はあなたにいくつかのおいしい無料のアートワークを与えるが、彼はゲーム内の画像の任意の配置の到来を議論するだけでなく、タイルむしろ:

「むかしむかし、あなたはすべてのために 小さな正方形のタイルを使用する必要がありました。 今日では、タイルベースの2Dエンジンを作る への本当の必要はありません。完全なアルファと 任意の画像とフィルレートの たくさんの、あなたはのように一緒にゲームを を置くことができますステッカーブック グラフィックを任意の 位置とレイヤーを狂人のようにドロップダウン ゲームのようなアクアリアはすばらしく見え、 タイルはどこにも見えません。「

リンクはIndieLibをもとにゲーム内のエディタを作ることにstep-by-step instructionsのためにそこにもあります。

+1

1ボックス思考の外のために! 私は一晩中ここにいるよ! –

1

は別のオプションは、(ピクセル)マップまたは直接ゲームマップを生成することであろう。これはもちろん、あなたのworlのサイズにもよりますが、特定のリソース(この時点では都市、この時点では鉱山)がたくさんある場合は

この件に関する記事は、ゲーム "不正"、それはかなり役に立つかもしれません(例えば、RogueBassinを試してください)

また、マップ配列に表現を定義するときに、基本イメージを持ち、多数の(小さな)「フリンジ」イメージをランダムに追加するなど、バリエーションを増やすためのデータ構造についても説明します。小さな岩を草の上に加える例)他のものは、ultima Vのように見えます。あなたがundeを渡すと、いくつかの屋根要素が透明になった場所も、これらの構造に基づいています。

時間があるときにルックアップ(長方形の森はありません!)を行い、特定のクエストの場所に集中することができるので、イメージ(ここではイメージのセット)を持つことは簡単です。 。

よろしく

ギヨーム

2

私はあなたの位置情報をインデックスストレージのデータ構造のための情報ではなく、あなたがそれに見上げているものに持つお勧めします。 I.

int get_terrain_type(int x, int y) { 
    return terrain[x][y]; 
} 

(全くわからないことは、あなたが何を意味するのかではありませんが、私はそこにそれを置くだろうと思っていた。)