在游戏编程(以及一般的OOP)中,我们何时决定使用Command与State设计模式?

问题描述 投票:-1回答:1

我在游戏编程模式中读到,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()
    {

    }
}
oop unity3d design-patterns
1个回答
0
投票

我认为,都可以看作是状态。那就是被动、走位、跳跃、近战(MearyCombat)。ING, RangedCombatING 可以认为是状态。而在你指出的情况下,我们不应该在角色处于被动状态时提供任何攻击的实现,或者在战斗状态时不提供说话的实现。

在给定的时间点上,角色处于某种状态,直到一个命令(RangedCombatCommand)被给出。收到命令后,角色将处于commbat状态,并将进行RangedCombat

© www.soinside.com 2019 - 2024. All rights reserved.