今日、タイルベースのゲームへの壁の実装に関するメモを書き留めるために時間を費やした後、突然、想像していたほど単純ではないことに気付きました。私の仕事の現在の段階は、実際に壁に関連するコードを作成することにもほど遠いですが、それを行うための3つの異なる方法を思いつきました。今のところ、自分のアイデアのどれが最もうまくいくか、何かを見逃したかどうかわからない。
重要:キャラクターはCAN関係なく、フォームの、壁を有するタイルの上に立ちます。
3つのバリアントすべてに共通すること:タイルマップは、一次元のstd :: vector(または同様の)ベースのコンテナーに「保持」されます。その理由は(驚くほど)別の質問への回答で説明されています。
壁に戻る。
A)シンプルなアプローチ。
ここには何も派手なものはありません。各タイルコンテナには、文字だけでなく、タイル内のエッジに接続されている1つまたは複数のWallオブジェクトを保持できます。
長所:実装が簡単で、エンジンを変更する必要はありません。短所:2つのこと。1つ-頭の中だけかもしれませんが、一部の組み合わせは見苦しいだけです。第二-このアプローチでは、2つの隣接するタイルから二重壁を作成できます。建物はゲームの重要な部分であり、二重壁により、ビルダーはゲーム手段を通じて壁の材料のアップグレードを控えることができ、既存の壁を2倍にすると耐久性が向上します。それは望ましくありません。確かに、二重壁を禁止する手順を含めることもできますが、それは悪い感じになります。
B)スマート(?)アプローチ。
プレイヤーにマップ全体を二重壁にする代わりに、私は彼らにそれを打ち負かすつもりです。すべての壁には、タイルの端に内側から取り付けられる2つの半分があります。したがって、単一の「壁ユニット」を作成するには、2つの隣接するタイルに2つの半壁オブジェクトを作成する必要があります。
長所:対称的です!!! また、現在のエンジンの仕様を大幅に変更する必要はありません。短所:より多くの手間、より多くのオブジェクト、そしてもちろん、「キャップ」。写真でわかるように、角は基本的に「キャップ」オブジェクトを求めて泣きます。私は実際にそれでクールです、それを追加するのはそれほど難しくありません。ねえ、私はすでに4つの接続されたキャップで作られた細い柱の計画を持っています。甘い。それでも、視野と視線の問題の可能性については心配があります。
C)総オーバーホールバリアント。
または、ゲームオブジェクトの個別のコンテナーとして境界線とコーナーを作成することもできます。そのように。
長所:よくわかりません。まあ、それは簡単です。間違いなく。短所:オーバーホールが必要です。ありがたいことにコードではなく、現在のゲームメカニックのメンタリティです-それは確かです。利点はそれほど明白ではありません。また、このアプローチは、以前の2つのコンテナよりもはるかに多くのコンテナを必要とします。インデックス作成の数学も少し苦労します。
タイル間に壁を作る3つの異なる方法があります。他に選択肢がある場合は、喜んでチェックします。私が見なかったアプローチのいずれかにメリット/ダウンがある場合-それらを指摘してください。