0

現在、C++ コンソール ゲームを開発しています。ゲームは、タイルの 2D 配列を持つボード クラスで構成されます。

また、プレイヤー、矢、アイテム用のゲーム ピース クラスもあります。

プレイヤー/矢印/アイテム間のすべての衝突を処理できるようにする必要があり、2 つの可能な解決策を考えています。

1)現在そのタイルにあるすべてのゲームピースを保持するすべてのタイルでリストを保持し、タイルに enterTile(gamePiece piece) を配置し、そこにロジックを配置します。

2) すべてのタイル/ピースの衝突をスキャンし、そこで処理する外部の「CollisionDetector」クラスを用意します。

どう思いますか?

4

2 に答える 2

1

次のような関数を作成します。

void Object::OnCollision(Object collision_with); // "Object" is a generic type 
                                                 // of an object in the game

この関数は衝突を処理します。衝突を見つけるために、オブジェクトがタイルに入る (enterTile) たびに、そのタイルに含まれるオブジェクトを検索し、それらの OnCollision 関数を呼び出すことができます。それはもちろん、ボード上のアイテムをそれぞれのタイルのリストとして保持することを意味します。

だから私は基本的にあなたの最初の解決策を提案します。

また、ボードが大きすぎると、すべてを処理するのに時間がかかる場合があることに注意してください。そのため、かなり大きい場合は、思いついた 2 番目のソリューションを検討してください。

于 2012-11-04T13:24:44.143 に答える
0

私の iOS ゲーム (タイル ベースではありませんが、オーバーラップがあると思います) では、アクターが衝突しようとしているかどうかをチェックするコレクション ディテクター クラスがゲーム ループに含まれています。それらが各アクターである場合、resolveCollisionWith(actor) メソッドで他のアクターに渡されます。このようにして、各アクターは別のアクターとの衝突にどのように応答するかを決定でき、CollisionDetector クラスは個々のアクターとその動作について知る必要がありません。

于 2012-11-04T13:27:16.103 に答える