0

我目前正在开发一个 c++ 控制台游戏。该游戏由一个带有 2D 瓷砖阵列的棋盘类组成。

我还为玩家、箭头和物品提供了游戏棋子类。

我需要能够处理玩家/箭头/物品之间的每一次碰撞,我想知道两种可能的解决方案。

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 函数。这当然意味着将板上的项目保留为各自磁贴中的一些列表。

所以我基本上建议你的第一个解决方案。

另请注意,如果您的电路板太大,则可能需要更多时间才能完成所有操作。因此,如果它相当大,请考虑您提出的第二个解决方案。

于 2012-11-04T13:24:44.143 回答
0

在我的 iOS 游戏中(不是基于图块的,但我认为可能存在一些重叠)我在游戏循环中有一个收集检测器类,用于检查演员是否即将发生碰撞。如果它们是每个actor,则在resolveCollisionWith(actor) 方法中传递另一个actor。这样,每个参与者都可以决定如何响应与另一个参与者的碰撞,并且 CollisionDetector 类不必知道各个参与者及其行为。

于 2012-11-04T13:27:16.103 回答