如何解决订阅作为参数传递的动作
我正在用 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 举报,一经查实,本站将立刻删除。