c# - 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),感到困惑。
解决方案
一个布尔值会做:
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();
}
}
推荐阅读
- javascript - 当我没有看到 api 结果时,我需要显示未找到数据
- c# - QuickFix/n - 登录内的自定义字段
- angular - Karma - 注入 Angular InjectionToken 问题
- c# - C# 对委托类型的泛型类型推断
- angular - Angular 等待 Promise 导致变量在模板中显示
- git - 如何在 package-lock.json 文件中正确更新 mem 包
- python - python多线程中的并发性与并行性?
- mysql - 计算移动平均线作为子查询
- c# - 如何根据方向更改 Grid.RowDefinitions
- project-management - 如何为关键跟踪器创建客户状态?