在游戏编程(以及OOP)中,我们什么时候决定使用命令与状态设计模式



我在《游戏编程模式》中读到,命令应该用于为参与者指明方向,状态用于指示参与者将处于的单一状态(站立、跳跃、移动等(。

我现在正在处理我的代码库中的一个问题,我似乎无法以一种好的方式思考。我目前有3个"互动状态",我的角色可以处于被动,近战,或远程战斗。

目前,我认为角色可以处于几个命令状态——移动、说话、攻击等。但角色不能在被动状态下攻击,也不能在战斗状态下说话——我的问题是,这些命令作为命令还是状态更有意义,我可以建立一个并发/分层状态机?

此外,我们是否应该将命令视为将角色从一个状态移动到另一个状态的动作(例如,如果我右键单击敌人,我会将"攻击"命令传递到状态构造函数,以从"移动"状态移动到"攻击"状态(?我想我只是很难概念化这里该做什么以及状态和命令如何交互。

示例状态,将附加到字符对象:

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()
{
}
}

我认为 ,所有这些都可以看作状态。也就是说,被动、行走、跳跃、近战ING、远程战斗ING都可以被视为状态
我们传递一个行走命令,因此角色的状态从被动状态变为清醒状态。在你指出的情况下,当角色处于被动状态时,我们不应该提供任何攻击实现,或者当角色处于战斗状态时,不应该提供无通话实现

在给定的时间点,角色处于某种状态,直到给定命令(RangedCombatCommand(为止。收到命令后,角色将处于命令状态,并将执行RangedCombat

最新更新