我在C#的控制台中制作一个简单的2D游戏作为学习项目。但是我似乎无法为碰撞系统提出一个不错的设计。
碰撞的解决对我来说是最大的问题。
基本上可以有以下两组效果的任意组合:
1.删除触发对象或图块;
2.删除远程对象或磁贴;
或者什么都不会发生 - 物体只是停止运动(即两者都是无懈可击的东西)。
非常感谢任何有关这方面的想法。
答案 0 :(得分:1)
如何检测碰撞以及如何对其进行响应是两个完全不同的问题,您应该将它们分开。
最简单的方法是在基础游戏对象中使用虚拟方法来响应碰撞:
class GameObject
{
virtual protected void OnCollision(GameObject withObject) { }
}
在碰撞检测系统中,只要两个物体发生碰撞,只需在两个物体上引发碰撞事件:object1.OnCollision(object2);
和object2.OnCollision(object1)
。
您很快就会意识到,这可能会在某些时候变得混乱,并希望了解多个调度以及如何在不支持它的语言上模拟它。