检查两个不同类别之间的两个矩形是否发生碰撞

3
我有两个类,第一个是Foo,它有坐标、速度和相关函数;第二个是Balloon,也有类似的东西。我想检查它们之间的碰撞,我已经编写了一个collision_check函数,并且不属于任何类。Foo和Balloon这两个类都在各自的类中定义了它们的坐标。尝试了三种方法:第一种方法是将它们的SDL_Rects也放在它们的类中,但是当我在main()中调用collision_check函数时,它找不到SDL_Rects,因为它们在类中。第二种方法是将SDL_Rects放在main()中并在那里定义它们,但是我无法将foos的坐标赋值给它们,因为坐标变量在类中。第三种方式是将坐标变量移到类外面,但是由于函数在类中,所以所有函数都不起作用。我该如何使用collide_check函数...我被卡住了。请尽量简单地解释一下,适合编程不到4个月的人理解。

这是其中一个应该优先考虑抽象化的情况。您已经找到了类之间的共同点(它们可以发生碰撞),因此应该创建那个抽象类,并确保每个对象都继承自它。 - smac89
1个回答

1
你应该创建一个抽象类"AbstractCollisionObject"类型。然后继承它创建"BoudingBoxCollisionObject"和"CircleCollisionObject"。
在你的碰撞检测函数中,你需要传入两个抽象碰撞对象进行测试。
你处理场景中的每个元素都应该有一个关联的抽象碰撞对象。

1
我不同意这需要创建BoundingBoxCollisionObject和CircleCollisionObject。没有必要创建一个复杂的继承树;OP只需要在Foo和Balloon中实现AbstractCollisionObject接口即可。 - Conduit
当他在场景中添加另一个元素时,他也必须处理该碰撞,并且必须复制代码。保持代码的DRY原则。谢谢。 - Pierre Emmanuel Lallemant
伙计们,这些东西太复杂了——继承、虚拟和抽象类等等。我想要一个半简单的2D游戏……我刚想到了一个主意,决定先在这里问问。如果我在类foo中创建一个类型为SDL_Rect的函数,并使用该函数来返回我的SDL_Rect框的坐标,会发生什么呢?例如: SDL_Rect Foo::get_coordinates() { return box; //The box.x, box.y, box.w and box.h } 但我需要每一帧都返回这些内容,我想知道性能是否会成为以后的问题…… - Bogdan
但我想在这里问一下,因为没有人建议过这个,所以肯定有什么问题...告诉我所有的优缺点。 - Bogdan
@Bogdan:你没有选择,你必须要在某个地方访问这些数据。如果你认为你将不得不处理几百个元素,那么你将无法进行每个碰撞测试:你将不得不添加四叉树。我给你的解决方案是我在一个项目中使用过的,它帮了我很多忙。 - Pierre Emmanuel Lallemant
不要认为即使是2D游戏,你也不能做那么复杂的事情。当场景中有上百个元素时,如果你没有这样做,看着你的代码会让你噩梦连连。 - Pierre Emmanuel Lallemant

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接