感谢您阅读和特别回复。我正在用运行耐力耗竭/再生(阿拉黑暗之魂)的状态制作状态机。
意图是玩家输入,然后状态将执行所执行的代码。例如:按住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);
}
}```
您看到CYCLE
和cycle
之间的区别吗?您正在填充cycle
,但switch
语句已结束CYCLE