将碰撞处理在基于瓷砖的游戏中

Where to put collision handling in tile based game?

本文关键字:游戏 于瓷砖 碰撞 处理      更新时间:2023-10-16

im当前正在开发C 控制台游戏。GAM由带有2D瓷砖的董事会课程组成。

我还为玩家,箭头和项目提供游戏课程。

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

1)在每个瓷砖上都保留所有游戏作品,并在该瓷砖上放置所有游戏作品,并在瓷砖上放一个餐厅(游戏机)并将逻辑放在那里。

2)有一个外部"碰撞"类,该类将扫描所有瓷砖/零件以碰撞并在那里处理它们。

您怎么看?

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

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

此功能将处理碰撞。为了找到碰撞,每当对象进入瓷砖(etterile)时,您可以搜索该瓷砖中包含的对象,并调用其OnCollision函数。当然,这意味着将项目保留在各自瓷砖中的某些清单中。

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

另外,如果您的董事会太大,则可能需要更多时间来完成所有操作。因此,如果它很大,请考虑您提出的第二个解决方案。

在我的iOS游戏中(这不是基于瓷砖,但我认为可能存在一些重叠),我在游戏循环中有一个收集探测器类,检查演员是否要碰撞。如果他们是每个演员,则通过Resolvecollision WasgrisionWith(Actor)方法通过了另一个演员。这样,每个演员都可以决定如何与另一个演员碰撞,而CollisionDetector班则不必知道个人演员及其行为。