假设有一个简单的游戏,我有一个名为Player
的类,它拥有玩家可能拥有的所有信息,例如name
,xPosition
,yPosition
,width
,height
等。
Player
类还有与之关联的方法,用于描述Player
可以执行的操作,例如move()
,draw()
等
在游戏中,我需要知道Player
何时与游戏中的任何其他对象发生碰撞,如墙壁,天花板或其他世界物体。
我可以通过两种方式解决这个问题:
创建类似CollisionDetecter
的类,其类似detectCollision()
的方法。在Player
课程中加入此课程的实例,并在适当的时候调用detectCollision()
方法
理由:
检测碰撞并不是Player
的内在属性,就像xPosition
,yPosition
或name
一样,所以它不属于这个班。
Player
课程中的混乱程度较低。 (这算了吗?)
在detectCollision()
课程中创建类似Player
的方法,检查Player
是否有任何内容
理由:
检测碰撞是Player
所做的事情,因此detectCollision()
方法应该直接在Player
类中。
只有玩家需要能够检测到碰撞,那么我为什么要用一种方法创建另一个全班?为什么不将它作为Player
类中的方法包含?
我觉得我总是在为这样的辩论而苦苦挣扎。
哪种方法最合适,为什么?这些都是坏的,我应该做些什么吗?
答案 0 :(得分:2)
一般情况: -
有时候,最好在玩家类上开始,看看后果是什么。重构最终是你的朋友,如果你发现你正在编写的方法需要与Player无关的东西,那么你就开始设计一个新的设计了。
具体: -
也许Player是GameObject,而碰撞检测是一种通用概念,用于确定游戏对象之间的碰撞。
也许玩家不是真正的一个类,也许玩家只是一个带有运动策略的游戏对象,即玩家真的是由游戏的更基本方面组成。