微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

订阅作为参数传递的动作

如何解决订阅作为参数传递的动作

我正在用 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 举报,一经查实,本站将立刻删除。