gpt4 book ai didi

c++ - 设置碰撞检测然后处理 2D 游戏中的碰撞

转载 作者:行者123 更新时间:2023-11-30 04:28:12 24 4
gpt4 key购买 nike

我搜索了碰撞检测主题,但它们都是关于检测本身的。我的问题更多是关于检测过程前后。我正在编写我的第一个大型游戏,我想让它尽可能高效。

游戏的前提是您驾驶一艘船绕着运动场飞行。在这个领域将是环境、敌舰和在太空中飞行和漂浮的抛射物提供的各种性质的障碍。如果需要或想要,对象将能够围绕其中心旋转等。

我设置测试的想法是让对象以某种方式将自己加载到队列和列表中。然后,游戏将获取队列前面的任何内容,并针对列表中的所有内容进行测试。它会首先检查以确保列表中的东西不是它本身(这会一直对所有东西产生碰撞,哈哈)。接下来,游戏将检查队列中的对象与列表中的对象是否发生碰撞。如果发生碰撞,那么它会标记对象说它们已经发生碰撞并保存一个引用或对象碰撞的任何内容。

例如,如果 A 与 B 发生碰撞,游戏会告诉 A 运行碰撞函数,B 运行碰撞函数,并将对 B 的引用存储到 A 中,B 将存储对 A 的引用。

然后游戏将继续检查队列中对象的碰撞,直到它遍历列表,每次执行上述操作以说明一个对象被多个对象击中或被多个对象击中。

例如,如果有 A、B 和 C 三个球,并且 A 在同一帧中同时被 B 和 C 击中,则 A 的速度将由 B 修改,然后由 C 修改,并且 B和 C 的速度将由 A 修改。

这样做会不会是一个聪明的方法?我现在并不担心碰撞的实际检测,有很多文章或教程以及我自己的想法可以解决这个问题。我还没有遇到任何谈论前后的事情。我不确定队列和列表中有多少东西会开始导致大量负载并减慢游戏速度。现在我的对象都只是 x,y 位置、x,y 速度、它们面对的方向以及其他一些东西。

现在我想我开始胡扯无关的事情了。任何见解或智慧将不胜感激。

最佳答案

对于许多游戏开发主题,没有通用的答案,这取决于您的游戏类型,但在遍历对象时请记住以下几点:

  • 尝试考虑在碰撞检测后您将如何做出实际 react (您会使用双分派(dispatch)、访问者、向下转换/rtti、存储可在函数映射中使用的特征,...)。有多种技术,都有其优点和缺点。您选择的方法可以反射(reflect)您如何进行实际遍历。
  • 尝试将您的场景分成不同类型的对象。例如,如果您有许多永远不会移动的静态对象,那么将它们全部相互测试会很荒谬,您应该将它们分开。但根据经验,不要试图对其进行过多的专门化,使用 staticdynamic 之类的东西可能会带来很大的好处,拥有 100 种类型会产生维护 -通常没有真正的收获。
  • 这可能与您的遮挡机制有关。例如,如果它是基于门户的,那么来自不同单元格的对象就不太可能发生碰撞。

可能还有其他一些提示我现在忘记了,因为这是一个复杂的主题,但我希望它能让你继续下去。

关于c++ - 设置碰撞检测然后处理 2D 游戏中的碰撞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10354445/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com