我在游戏编程模式中读到,Command应该用来给演员提供方向,而States用来指示演员的单一状态(站立、跳跃、移动等)。
我现在正在处理我的代码库中的一个问题,我似乎无法用一个好的方法来解决这个问题。目前我的角色有3种 "交互状态"--被动、近战或远程战斗。
而且有几个我 认为 目前,一个角色可以处于命令状态--移动、说话、攻击等。但是一个角色不能在被动状态下攻击,也不能在战斗状态下说话--我的问题是这些命令是作为Commands还是作为State更有意义,我可以建立一个concurrenthierarchical状态机?
另外,我们是否应该将Commands看作是将角色从状态移动到状态的动作(例如,如果我右键点击一个敌人,我就会将 "攻击 "Command传递到State构造函数中,以从 "移动 "状态移动到 "攻击 "状态)?我想我只是在概念上很难理解这里该怎么做,以及状态和命令如何交互。
示例状态,将被附加到一个角色对象上。
public class MeleeState : InteractionState
{
public override void HandleInput(Character character, InteractionCommands command)
{
base.HandleInput(character, command);
if (command == InteractionCommands.CHANGETOPASSIVE)
{
}
else if (command == InteractionCommands.CHANGETORANGED)
{
}
else
{
}
}
}
例如命令
public class Attack : Command
{
Attack(Character aggressor, Enemy victim)
{
}
public override void Execute()
{
base.Execute();
}
public override void Undo()
{
base.Undo();
}
// Update is called once per frame
void Update()
{
}
}
我认为,都可以看作是状态。那就是被动、走位、跳跃、近战(MearyCombat)。ING, RangedCombatING 可以认为是状态。而在你指出的情况下,我们不应该在角色处于被动状态时提供任何攻击的实现,或者在战斗状态时不提供说话的实现。
在给定的时间点上,角色处于某种状态,直到一个命令(RangedCombatCommand)被给出。收到命令后,角色将处于commbat状态,并将进行RangedCombat