首页 > 解决方案 > C# bool 并以简洁的方式打开关闭功能?

问题描述

我得到以下代码。

public class MpChange : CusEffect
{
    bool AlreadyDo = false;
    bool AlreadyStop = false;

    public override void CondDel(object sender, CondEventArgs e)
    {
        if (e.CondMet && !AlreadyDo)
        {
            DoEffect();
            AlreadyDo = true;
            AlreadyStop = false;
        }
        else if (!e.CondMet && !AlreadyStop)
        {
            StopEffect();
            AlreadyStop = true;
            AlreadyDo = false;
        } 
    }

    public override void DoEffect()
    {
        Debug.Log(WhoEffect.name + "'s Mp changed +5");
    }
    
    public override void StopEffect()
    {
        Debug.Log(WhoEffect.name + "'s Mp changed -5");
    }
}

这在角色的 hp 已满时调用,(然后是 DoEffect()),如果未满,则调用 StopEffect()。

当角色的 hp 改变时,事件发布并且这个 MpChange 类订阅它。

在这种情况下,这段代码可以整洁吗?

我讨厌使用这 2 个布尔变量(AlreadyDo、AlreadyStop),感到困惑。

标签: c#unity3d

解决方案


一个布尔值会做:

    bool State = false;
    public override void CondDel(object sender, CondEventArgs e)
    {
        if (e.CondMet == State) return;  // nothing to do, state's the current one
        State = !State;  // flip the flag
        if (State) {  // do or undo a thing
            DoEffect();
        } else {
            StopEffect();
        }
    }

推荐阅读