在基于图块的游戏中放置碰撞处理的位置?

时间:2012-11-04 13:10:40

标签: c++

我正在开发一个c ++控制台游戏。 gam由一个带有2D数组tile的板类组成。

我还有玩家,箭头和物品的游戏片类。

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

1)在每个包含当前在该图块上的所有游戏块的图块上保持一个列表,并在图块上放置一个enterTile(gamePiece部分)并将逻辑放在那里。

2)有一个外部“CollisionDetector”类,它将扫描所有瓷砖/碎片以进行碰撞并在那里处理它们。

您怎么看?

2 个答案:

答案 0 :(得分:1)

我会创建一个看起来像这样的函数:

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

此功能将处理碰撞。 为了找到碰撞,每当一个对象进入一个区块(enterTile)时,你可以搜索该区块中包含的对象,并调用它们的OnCollision函数。 这当然意味着将电路板上的项目保存为各自区块中的一些列表。

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

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

答案 1 :(得分:0)

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