我正在用C ++实现一些游戏,但从技术上讲,只要我有严格的OOP /设计模式问题就无所谓了。
我有一个抽象类型MapObject的包含。让我们称他为MO。
MO内部我有扩展MapObject的类:TankX,TankY,Bullet,LineBullet,Terrain等。
我需要MO,只要我和其成员做了很多的东西。
东西包括碰撞检测。
在游戏循环中,我按照以下方式寻找碰撞:
foreach(MO A)
foreach(MO B)
somehow check collision policy and if A may collide B in theory, check this out in practice
take coords of A, B and detect collision
问题是,碰撞政策非常复杂。
例如:LineBullet可能会与TankX和Terrain发生冲突,但不会与TankY冲突。子弹可以碰撞两个坦克,但不能碰撞地形。等等。
实际上,我有更多的课程,所以有更复杂的例子。
好吧,在嵌套的foreach循环中,我所拥有的是MO A和MO B.我不知道它们究竟是什么; TankY,TankX,LineBullet等等。我只有访问它们的通用接口。好的。
问题是:如何以正确的方式在这些嵌套循环中考虑冲突策略?
我的临时解决方案太难看了,我不能接受这个。
我的工作如下:
在嵌套循环中:
foreach(MO A)
foreach(MO B)
if(PM->checkCollisionPolicy(A->getID(),B->getID()))
start to detect collision