交换机内部的代码执行不起作用(类似黑暗灵魂的耐力系统)

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

感谢您阅读和特别回复。我正在用运行耐力耗竭/再生(阿拉黑暗之魂)的状态制作状态机。

意图是玩家输入,然后状态将执行所执行的代码。例如:按住LShift CYCLE = EActions::SPRINT,然后执行案例EActions::SPRINT的代码。我尝试将开关放置在Tick()中,同时启用/禁用计时器,并将计时器放入另一种方法中,该方法调用下面的代码以查看是否有任何更改。

到目前为止,状态改变了,其他都没有。

void ADirge::Cycle()
{
    FTimerHandle cycle;
    GetWorldTimerManager().SetTimer(cycle, this, &ADirge::Cycle, 1.0f, true, 0.0f);

    switch (CYCLE)
    {
    case EActions::SPRINT: //HOLD DOWN LEFT SHIFT
        if (stamina > 0) //WHOLE THING DOESN'T WORK
        {
            MVT->MaxWalkSpeed = sprint; 
            stamina -= 1;
        }
        else
        {
            MVT->MaxWalkSpeed = walk; 
        }
        break;
    case EActions::WALK: //RELEASE LEFT SHIFT
        MVT->MaxWalkSpeed = walk; //WHOLE THING DOESN'T WORK

        if (stamina > 6)
        {
            stamina += 1;
        }
        break;
    case EActions::ATK:
        if (stamina > 0) //WHOLE THING DOESN'T WORK
        {
            stamina -= 2;
        }
        break;
    case EActions::COOLDOWN:
        if (stamina < 6) //WHOLE THING DOESN'T WORK
        {
            stamina += 2;
        }
        break;
    default:
        EActions::ASLEEP; //State is intended to do nothing, kind of like NULL
        GetWorldTimerManager().ClearTimer(cycle);
    }
}```
c++ unreal-engine4
1个回答
0
投票

您看到CYCLEcycle之间的区别吗?您正在填充cycle,但switch语句已结束CYCLE

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