问题描述
我正在用 C# 为游戏制作一个有限状态机 (FSM)。目标是使其尽可能独立于传统控制流。我目前正在尝试用它创建枪支行为。 当枪进入“弹药用完”状态时,它应该开始监听添加弹药并自动将状态更改为重新加载,但我在使用 C# 语言时遇到了一些问题。
我基本上想将一个 Action 传递给另一个函数。在该功能中,我想订阅它:
data = [False,False,False]
print(sum(data)!=0) #False
功能:
var outOfAmmo = new ListenerState<GunState>(GunState.OUT_OF_AMMO);
outOfAmmo.AddTrigger(currentAmmo.OnAdded,GunState.RELOAD);
当 OnEnter 和后来的触发器被调用时,我希望 setState 被调用但它不是。
拉出 AddTrigger 的内容使一切按预期工作:
public class ListenerState<TStateID> : State<TStateID>
...
public void AddTrigger(Action trigger,TStateID next)
{
Action setState = () => fsm.SetState(next);
OnEnter += () => trigger += setState; //When we enter "Out of ammo" start listening for when ammo is added.
OnExit += () => trigger -= setState; //When we exit "Out of ammo" we don't want to change state to reloading when ammo is added anymore
}
我在这里做了一个较小的问题示例:https://dotnetfiddle.net/MG1tve
我不确定这里发生了什么。
默认情况下是否按值传递操作:O?因为作为 ref 传递解决了问题 (https://dotnetfiddle.net/XNresg)
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)