我正在研究c#中的2D平台游戏,就像大多数人一样,但我有一个不错的开始项目,我有一个名为Player的类,然后我处理该玩家的所有碰撞以及滚动gamescreen类中背景中的块。我刚刚添加了另一个玩家(在这种情况下是一个不同的战士类型),但是我的所有碰撞都是基于玩家的位置和速度,我如何改变棋子的移动和碰撞来改变战士的速度和位置(没有重复或创建相当多的代码)。
感谢Sam的任何帮助。
答案 0 :(得分:2)
继承是你的朋友。你可能应该有一个基础的Player类,甚至更低级别的东西。基类实现了colision检测和移动代码。你的战士和其他玩家类型应该继承该类并覆盖不同的部分以改变行为。
答案 1 :(得分:1)
我的策略大致如下:
我有一个Character
课程。它包含HitboxSet
。 HitboxSet
公开了有效Hitbox
。我的所有碰撞都是基于Hitbox
实例完成的。根据我需要的角色,我传递不同的精灵,命中箱,动作等。
结果是高度的灵活性,同时允许您将您的顾虑彻底分开。这种策略被称为组合,在几乎所有情况下都被广泛认为优于基于继承的策略。
此策略优于继承的主要优点是能够混合和匹配组件。如果有一天,你决定需要一个小于前一个的新射弹,并以正弦模式移动,你只需使用一个新的正弦运动。您可以无限制地重复使用这些东西。
您可以使用继承执行类似的操作:子类可以覆盖方法并执行不同的操作。问题是你要么继续添加具有不同组合的新子类,要么最终得到一个可怕的复杂树,或者限制你的选择。
简而言之,如果某些事情自然会发生变化,因为它几乎肯定会在游戏中出现,那些变体应该是不同的类别,可以以不同的方式组合而不是相互排斥的覆盖。