2014-01-21 67 views
1

我正在Unity3d(c#)中使用箭头键和2个操作按钮控制字符的2D游戏。如何正确扩展字符的类

我的问题很简单,我可以解决它,但解决方案对我来说似乎有点肮脏。我用一个很简单的状态机,主人公是在水平或垂直方式移动(地面和梯)

我延长目前的状态是:

HeroState - > HeroStateStatic - > HeroStateMovement

然后我伸出静态或移动到最终状态:

HeroStateMovement - > HeroStateRunning或HeroStateStatic - > HeroSta teLookUp

但是我始终在呼唤它决定下一步该怎么做了巨大的外部函数(在英雄级),然后切换状态

我相信我应该有国家本身这个道理,但在规定阶梯有不同的检查和可能的选择,然后陈述在地板上,我不知道如何修改这些类,使所有必要的代码只写一个(这就是为什么现在是在英雄,而不是在州)...是在那里什么像交叉延伸技术?

(我知道如何使用抽象类和接口,但它可能并没有解决我的麻烦)

感谢您的帮助

回答

0

你的问题真的可以用状态机来解决,但是既然你有一个庞大的班级决定要做什么,似乎你在实施state pattern时遇到了麻烦。

blog post有关于在Unity应用程序中实现状态模式的很好的解释,你可以很容易地谷歌获得更多的资源。

一旦我想创建一个使用方法作为状态的简单状态机,只是为了方便(因为模式使用类作为状态)。人们可以使用这种方式来让状态机处于状态(这也可以通过常规状态模式来实现),所以如果你想知道这个,你可以阅读my stack overflow question

+0

thx回答 - 巨大的决策方法是巨大的,因为它被所有州共享,我的问题是,许多州共享这个决定解决 - 例如,WalkState RunState和JumpState有几乎相同的决策解决方案 - d需要的是多重继承,这在c#中不起作用,我正在c#中寻找其他解决方案。 – arximedes

+0

我不完全理解。你说这个方法很大,因为它解决了很多状态。因此,这不是一个普通的决定,因为它必须解决许多国家的特点。为什么不是有一个巨大的方法,你不能在每个国家内的一个较小的决策方法?如果这三个状态具有几乎相同的解决方法,它可以从一个基类继承,那么为什么你需要多重继承? – Roberto

+0

sry我的英语不是很原生的:D它解决了许多州的决定,例如:跑步或步行运动后,它会询问英雄是否想跑步或步行或跳跃或停留或转身,但如果你在房间的尽头它知道你不能前进,所以你只能转弯,有一些状态将你从楼梯移动到梯子,然后它会询问你可以在梯子上做什么,我有2个决定功能DecideFloor,DecideLadder,但是你可以在诸如LookUp,LookDown状态之类的场景中,你可以通过运行例如 – arximedes