【烘焙课堂】另一个使用(2)——停止协同路由

【烘焙课堂】另一个使用(2)——停止协同路由

C# 停止带有切换按钮的协程

c#unity3d

C# stop co-routine using toggle button, c#, unity3d, C#, Unity3d,我有一个 co 例程,当切换按钮的 bool 改变时触发,当 bool 再次改变时,co 例程应该停止,另一个应该开始。 这是我的代码: public class thermoPowerControlPanel : MonoBehaviour {private ThermoElectric thermo;public bool toggleBool1;public int temperature;private int tempUp = 10;pri

我有一个 co 例程unity 暂停继续按钮代码,当切换按钮的 bool 发生变化时触发,当 bool 再次变化时,co 例程应该停止,另一个应该开始。 这是我的代码:

    public class thermoPowerControlPanel : MonoBehaviour {
    private ThermoElectric thermo;
    public bool toggleBool1;
    public int temperature;
    private int tempUp = 10;
    private int tempDown = 1;
    public thermoPowerControlPanel (){
        temperature = 100;
    }
    public void turbine1State (bool toggleBool1) {
        if (toggleBool1 == false) {
            Debug.Log (toggleBool1);
            Invoke("ReduceTemperatureEverySecond", 1f);
        }

flash按钮声音暂停代码_unity 按钮代码怎么写_unity 暂停继续按钮代码

if (toggleBool1 == true) { Debug.Log (toggleBool1); Invoke("IncreaseTemperatureEverySecond", 1f); } } private void ReduceTemperatureEverySecond() { if (toggleBool1 == true) { Debug.Log("I was told to stop reducing the temperature."); return; } temperature = temperature - tempDown; Debug.Log (temperature); Invoke("ReduceTemperatureEverySecond", 1f); } private void IncreaseTemperatureEverySecond() { if (toggleBool1 == false) { Debug.Log("I was told to stop increasing the temperature."); return;

unity 按钮代码怎么写_unity 暂停继续按钮代码_flash按钮声音暂停代码

} temperature = temperature + tempUp; Debug.Log (temperature); Invoke("ReduceTemperatureEverySecond", 1f); } }

当函数 turbine1State(bool t1) 接收到第一个 bool(false) 时程序开发,例程 DecreateTemperatureEverySecond() 启动,但随后立即停止,并发送 Debug.Log 消息,它应该继续降低温度直到 bool(由切换按钮)变为真。

你能帮我吗

您只能通过名称停止协程

试试类似的东西

start例程(“增加温度”)然后
StopCoroutine(“升高温度”)

有许多方法可以调用
startcroutine

.如果你用“string”方法启动一个协程,你可以像下面这样“停止”协程 如果你这样启动它

start routine(functionnameasstringher()) 你不能按名称停止它

(您也可以访问实际的枚举器来停止协程,但这远远超出了初学者使用协程的范围。)

您只能通过名称停止协程

试试类似的东西

start例程(“增加温度”)然后
StopCoroutine(“升高温度”)

有许多方法可以调用
startcroutine

.如果你用“string”方法启动一个协程,你可以像下面这样“停止”协程 如果你这样启动它

start例程(functionnameasstringher())您不能按名称停止它

(您也可以访问实际的枚举器来停止协同路由,但这远远超出了初学者使用协同路由的范围。)

这很简单! 在
启动中

 InvokeRepeating( "Temp", 1f, 1f );

. . 。然后

private void Temp()
 {
 if (tog.isOn)
     temperature = temperature + 1;
 else
     temperature = temperature - 1;
 
 // also, ensure it is never outside of 0-100
 temperature = Mathf.Clamp(temperature, 0,100);
 }

如果您需要“完全停止”运动(上下),请这样做

 CancelInvoke("Temp");

太简单

注意:仅供参考,我解释的另一种模式是:

 bool some flag;
 Invoke("Temp", 1f);
 private void Temp()
   {
   if (some flag is tripped) stop doing this

unity 暂停继续按钮代码_flash按钮声音暂停代码_unity 按钮代码怎么写

.. do something .. Invoke( ..myself again after a second .. ) }

在现实生活中,“不断调用自己”通常比使用 InvokeRepeating 更好

在这个简单的示例中,只需使用 InvokeRepeating,然后使用 CancelInvoke。

这很简单!存在

启动中

 InvokeRepeating( "Temp", 1f, 1f );

. . 。然后

private void Temp()
 {
 if (tog.isOn)
     temperature = temperature + 1;
 else
     temperature = temperature - 1;
 
 // also, ensure it is never outside of 0-100
 temperature = Mathf.Clamp(temperature, 0,100);
 }

如果您需要“完全停止”运动(上下),请这样做

 CancelInvoke("Temp");

unity 暂停继续按钮代码_unity 按钮代码怎么写_flash按钮声音暂停代码

太简单

注意:仅供参考,我解释的另一种模式是:

 bool some flag;
 Invoke("Temp", 1f);
 private void Temp()
   {
   if (some flag is tripped) stop doing this
   .. do something ..
   Invoke( ..myself again after a second .. )
   }

在现实生活中,“不断调用自己”通常比使用 InvokeRepeating 更好

在这个简单的示例中,只需使用 InvokeRepeating,然后使用 CancelInvoke。

搜索关于“停止协同路由”的 1000 个问题。 我认为问题出在 bool if 条件上,我有代码来阻止它,但它永远不会被激活。 按照 Joe Blow 的建议,我更改了代码以停止使用协程。 由于某些未知原因,调用 ReduceTemperatureEverysecond() 时 toggleBool1 似乎变为 true。 嗨@growanimation。 . 你能简单解释一下,你想要实现什么游戏图片,然后你可以轻松地在 1000 个问题上编写代码搜索“停止协程”我认为问题出在 bool if 条件上,我有代码来阻止它,但它从来没有活性。 按照 Joe Blow 的建议,我更改了代码以停止使用协程。 由于某些未知原因,调用 ReduceTemperatureEverysecond() 时 toggleBool1 似乎变为 true。 嗨@growanimation。 . 能不能简单说一下,你要达到什么目的,这样写代码就容易多了。 我刚刚做了这个,但它仍然不起作用,我有同样的问题。 我将使用新代码编辑问题。 这个答案是不正确的。您也可以通过引用

Coroutine

对象或当前返回的

IEnumerator

停止协同路由。检查重载方法

monobhavior.stopCorroutine

. 据我了解,较新的启动/停止协程调用您的代码 - 它有效,天哪,您可能对这个微妙的问题感兴趣@JerrySwitalski! 我刚刚做了,但仍然没有用,我有同样的问题。 我将使用新代码编辑问题。 这个答案是不正确的。您也可以通过引用

Coroutine

对象或当前返回的

IEnumerator

停止协同路由。检查重载方法

monobhavior.stopCorroutine

. 据我了解,较新的启动/停止协程调用您的代码 - 它有效unity 暂停继续按钮代码,天哪,您可能对这个微妙的问题感兴趣@JerrySwitalski! 但是我不需要再次调用函数本身,因为现在我正确地使用了 InvokeRepeating? 是的,这是十亿分之一的正确率。 我只是出于好奇才提到“其他方法”。 但是我不需要再次调用函数本身,因为现在我正在使用 InvokeRepeating 对吗? 是的,这是十亿分之一的正确率。 我只是出于好奇才提到“其他方法”。

如有侵权,请致邮箱service@joyindie.com联系我们