Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在基于平铺的游戏中,在哪里放置碰撞处理? 我目前正在开发一个C++控制台游戏。 gam由一个具有2D瓷砖阵列的board类组成_C++ - Fatal编程技术网

在基于平铺的游戏中,在哪里放置碰撞处理? 我目前正在开发一个C++控制台游戏。 gam由一个具有2D瓷砖阵列的board类组成

在基于平铺的游戏中,在哪里放置碰撞处理? 我目前正在开发一个C++控制台游戏。 gam由一个具有2D瓷砖阵列的board类组成,c++,C++,我也有玩家、箭和物品的游戏碎片类 我需要能够处理玩家/箭头/物品之间的每次碰撞,我想知道两种可能的解决方案 1) 在每个磁贴上保留一个列表,其中包含当前磁贴上的所有游戏块,并在磁贴上有一个enterTile(游戏块),并将逻辑放在那里 2) 拥有一个外部的“CollisionDetector”类,该类将扫描所有瓷砖/碎片的碰撞并在那里处理它们 你觉得怎么样?我将创建一个如下所示的函数: void Object::OnCollision(Object collision_with); // "Ob

我也有玩家、箭和物品的游戏碎片类

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

1) 在每个磁贴上保留一个列表,其中包含当前磁贴上的所有游戏块,并在磁贴上有一个enterTile(游戏块),并将逻辑放在那里

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


你觉得怎么样?

我将创建一个如下所示的函数:

void Object::OnCollision(Object collision_with); // "Object" is a generic type 
                                                 // of an object in the game
此函数将处理碰撞。 为了找到碰撞,每当对象进入互动程序(enterTile)时,您可以在该互动程序中搜索包含在其中的对象,并调用其迎面碰撞函数。 这当然意味着将这些项目保留在黑板上,作为它们各自的分幅中的一些列表

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


还要注意的是,如果你的董事会太大,可能需要更多的时间来完成所有这一切。因此,在相当大的情况下,考虑你想出的第二个解决方案。在我的iOS游戏中,

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

碰撞检测需要应用于移动操作,对吗?这些都是在哪里实现/触发的?我还在努力决定。我相信每个可移动的对象都有一个移动功能。我认为版本1)是一个很好的策略,只要一次只有一个瓷砖可以移动。策略2)可能是一个很好的选择,或者作为一个更通用的设计元素,它可以提供使用工件特定方法进行的碰撞检查。这不会让您处理同一碰撞两次吗?@DeaglinG处理碰撞两次并不一定是错误的,如果一些碰撞工件可能凌驾于其他工件之上(赢得测试)。但在这种情况下,你可能需要检查你在一块瓷砖上的碰撞,甚至按“优先级”排序。我相信我会同意的。(这是第一个解决方案)像你说的那样,有一个colideWith()函数,并处理其中的逻辑。非常感谢