设置碰撞检测,然后在 2D 游戏中处理碰撞
Setting up for collision detection and then dealing with a collision in a 2D game
我搜索了碰撞检测主题,但它们都是关于检测本身的。我的问题更多的是关于检测过程之前和之后。我正在写我的第一个大型游戏,我想让它尽可能高效。
游戏的前提是你在运动场上驾驶一艘船。在这个领域,环境、敌舰和在太空中飞行和漂浮的射弹提供了不同性质的障碍物。如果需要或想要,这些对象将能够围绕其中心等旋转。
我设置测试的想法是让对象以某种方式将自己加载到队列和列表中。然后,游戏将获取队列前面的任何内容,并针对列表中的所有内容进行测试。它将首先检查以确保列表中的内容不是它自己(这将一直为所有内容生成冲突,哈哈(。接下来,游戏将检查队列中的对象与列表中的对象之间是否存在冲突。如果发生碰撞,那么它将标记对象,说明它们已碰撞并保存引用或对象碰撞的任何内容。
例如,如果 A 与 B 发生碰撞,游戏会告诉 A 运行碰撞函数,B 运行碰撞函数,并将对 B 的引用存储到 A 中,B 将存储对 A 的引用。
然后,游戏将继续检查队列中对象的碰撞,直到它运行列表,每次都执行上述操作以说明一个对象击中或被多个对象击中。
例如,如果有三个球,A、B 和 C,并且 A 被
B 和 C 在同一帧中击中,则 A 的速度将由 B 修改,然后由 C 修改,B 和 C 的速度将由 A 修改。这是这样做的明智之举吗?我现在并不担心碰撞的实际检测,有很多文章或教程以及我自己的想法来解决这个问题。我没有遇到任何前后说话的东西。我不确定队列和列表中有多少东西会开始导致大量负载并减慢游戏速度。现在我的物体都只是x,y位置,x,y速度,它们面向的方向,以及其他一些东西。
现在我想我开始喋喋不休地谈论不相关的事情。任何见解或智慧将不胜感激。
至于许多游戏开发主题,这个问题没有通用的答案,这取决于你的游戏类型,但在遍历对象时请记住一些事项:
- 试着考虑一下在碰撞检测后你将如何做出实际反应(你会使用双重调度、访问者、向下投射/rtti、存储可以在函数图中使用的特征,......有多种技术,都有其优点和缺点。您选择的方法可以反映在实际遍历的方式中。
- 尝试将场景拆分为对象类型。例如,如果您有许多永远不会移动的静态对象,那么将它们相互测试是荒谬的,您应该将它们分开。但根据经验,不要试图过多地专门化,拥有
static
vsdynamic
之类的东西可能会带来很大的好处,拥有 100 种类型会产生一个维护地狱,通常没有真正的收益。 - 这可能与您的遮挡机制有关。例如,如果它是基于门户的,则来自不同单元格的对象不太可能发生碰撞。
我现在可能忘记了一些其他提示,因为这是一个复杂的话题,但我希望它能让你继续前进。
相关文章:
- 警告处理为错误这里有什么问题
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 处理多个异常集合的C++方法
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 使用流处理接收到的数据
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 基于多个条件处理地图中的所有元素
- 如何处理C 游戏中的许多对象
- C++中游戏的动态数据处理
- 将碰撞处理在基于瓷砖的游戏中
- 商业游戏如何处理即时的字体加载
- 如何在显示游戏菜单时处理无效输入
- 设置碰撞检测,然后在 2D 游戏中处理碰撞
- 处理正在进行计算的基于浏览器的游戏的后端有哪些选项
- 在无尽的亚军游戏中处理大x值
- 基于文本的游戏中出现未处理的异常
- 用c++对Evil Hangman游戏中的字族进行存储和处理
- 改进棋盘游戏回合处理
- 如果每个变量和类对象都是在编译时确定的,那么如何处理来自游戏的动态数据呢?