2D碰撞分辨率系统

本文关键字:系统 分辨率 碰撞 2D | 更新日期: 2023-09-27 18:17:03

我正在用c#在主机上制作一个简单的2D游戏,作为一个学习项目。然而,我似乎无法想出一个像样的设计碰撞系统。

碰撞的解决对我来说是最大的问题。

基本上可以是以下两组效果的任意组合:
1. 触发对象或贴图被移除;
2. 远程对象或tile被删除;
或者什么也不会发生——物体只是停止移动(即。当两者都是无懈可击的时候)。

2D碰撞分辨率系统

如何检测碰撞和如何响应它是两个完全不同的关注点,您应该将它们分开。

最简单的方法是在你的基本游戏对象中设置一个虚拟方法来响应碰撞:
class GameObject
{
    virtual protected void OnCollision(GameObject withObject) { }
}

在碰撞检测系统中,每当两个物体发生碰撞时,只需在两个物体:object1.OnCollision(object2);object2.OnCollision(object1)上引发碰撞事件。

你很快就会意识到这可能会在某些时候变得一团糟,并且会想要学习多分派以及如何在不支持它的语言上模拟它。