2017-03-03 7 views
2

ルアで手続き生成を使ってゾンビの黙示録ゲームを2次元にしたいと思っています。手続き型生成の構造体で現実世界を生成する

複数のノイズマップを使用することで、リアルマップのバイオメトリを生成するために使用できる高さマップ、水分マップ、温度マップの2次元配列を簡単に取得できます。 これは簡単ですが、ラグを減らすためにマップをチャンクに分割する必要があるため、チャンクは一度しか生成しません。私もそれをすることができますが、私が望むのは、川、木々(森の中のより多くの木々)、農場やその他の特別な建物、村、都市、道路、巨大なオープンワールドです。

私の現在他の小さな構造の2D配列を別の構造マップにランダムに配置することは考えていますが、その方法はわかりませんが、建物と道路が重複する可能性があります。そして、私は2つ以上のチャンク内にある単一の構造を生成することはできないと考えています(構造体がマップを上書きするため)。

どうすればいいですか? ありがとうございました!

+0

「理想的な」スポット、より大きな水の近く、山の地形の小さなスポットを好むために、高さマップマトリックスに頼ることができます。また、町の間にある程度の距離を置いてください。 –

答えて

2

世界は静的でも動的でもありますか?木が燃え尽きると村落が破壊され、他の場所で再建されれば複雑さが増します。また、村人がいて、何らかのAIを持っているならば、彼らは周りのものを「知る」必要があり、手続き的な世代に固執することがあります。

世界のチャンクを作成し、新しいチャンクを作成する必要がある場合は、構造データを生成して保存することが「トリック」です。また、これは "境界"関数として起こることもできます。プレーヤーがチャンクAにある場合、バックグラウンドでは、まだ生成されていないチャンクを生成して保存します。

配置構造は簡単です。チャンクIDと構造体の(チャンク固有の)xy座標は、それらを配置するために必要なものです。構造体の配置の衝突検出を支援するために、構造体の「領域」の幅と高さを含めることができます。たとえば、農場のフェンスに囲まれている場合は、フェンシングをそこにレンダリングして、プレイヤーがその周りを歩くことができます。洞穴入り口のある山にあるダンジョンのようなものは、プレイヤーがそれとやりとりするときにプレイヤーをダンジョンに置く「入り口構造」が必要です。

これらの仕組みを理解する上での作業BEFOREオープンワールドを非常に巨大にしようとしています。最初に2x2または3x3チャンクの世界で作業し、その中の構造を個別にテストします。これは、ゲームプレイがおそらく景観よりもこれらの構造の周りを回転するため、最初は風景の決定よりも重要です。

Luaはあなたのゲームを実現するのに最適ですが、最終的にはC/C++の手続き型生成/構造体レイアウト/ etcをやりたがっているでしょう。 Use C/C++ to do the heavy lifting like the procedural generationを入力し、Lua/LOVEが消費するC-callに変換します。 Here's some codeは、2Dトップダウンではなく、生成、タイミングなどを考慮に入れています。 Lua/LOVEのHere's a city generatorスタンフォード出身のMore on map generation、およびStackoverflow postである。 NPC movement in 2d map

は、お楽しみに!

+0

_why_で少し詳しく説明できますか?C/C++はこれらのタスクに適していますか? –

+0

@MikeLyons必ずしも良いとは限りません。アルゴリズムはアルゴリズムです。しかし、上記の私の提案によれば、世界の世代に多くの機能が組み込まれるにつれて、処理の負担が大きくなり、単純にゲームのパフォーマンスが必要になります。あなたがその言語でこれをやるのがより快適なら、特に生成アルゴリズムがより複雑になるなら、Luaを使用して生成アルゴリズムを確かめてください。パフォーマンスが大ヒットします。 – ZagNut

+0

@MikeLyons(con't)パフォーマンスが低下し始めると、引き継ぐために何か低いレベルが必要になります。 C/C++である必要はありません.Luaバインディングを持つ低レベルの言語を使用できます。 また、時代遅れの脳にこれを描いているときに追加する必要があります。「リアルタイム」手続き型の世代(例えば、要求に応じて再構成され、メモリにステージングされたチャンク)を考えています。チャンクがディスク上の静的データである場合、実際にはそのデータに対する状態の変化を追跡するだけです(例えば、地上タイルの穴を掘るなど)。 – ZagNut

関連する問題