在限制范围内随机时间改变bool的值

时间:2015-06-29 10:28:48

标签: c# random boolean

我想写的是一段代码,它会将bool的值从true更改为false,反之亦然,在1到3秒之间的随机时间。我尝试过很多随机使用的方法。等,并试图设置一个重置的计时器,但它不会点击。我使用的是我很新的c#,所以我不确定这是一个简单的技巧还是更复杂的东西。 无论如何,任何论坛或视频都非常受欢迎。

//

我尝试使用Matthew提供的代码,但它引发了很多错误。我正在使用团结5,这可能是问题所在。 无论如何,我尝试使用以下代码。

bool switchSpawning = false;
void Update () {
    if (switchSpawning == false) {
        transform.position = spawnPosition;
    } else if (switchSpawning == true) {
        transform.position = spawnPosition2;
    }
}
    void Switching (){ // works in void update - runs at every frame
    System.Random rnd = new System.Random ();
    int num = rnd.Next(0,10); //random number between 0 and 10
    if (num < 5) {
        switchSpawning = false;
        Debug.Log("False");
    } 
    else if (num > 5) {
        switchSpawning = true;
        Debug.Log("True");
    }
}

如果我将代码放在void中切换到void更新它的工作方式正如我想要的那样,显然不是在随机时间。

1 个答案:

答案 0 :(得分:1)

您可以创建一个计时器来执行此操作。

首先,使用随机数生成器生成1000到3000之间的毫秒数:

int millseconds = new Random().Next(1000, 3001);

然后创建一个在很多毫秒后将触发的计时器,并为其操作指定一些将设置布尔值的代码:

var callback = new Timer(dummy => { value = true; }, null, millseconds, -1);

请注意,未使用dummy参数。将变量设置为true的操作是{ value = true; },它假定在范围内有一个名为value的bool变量。

另请注意,此计时器的分辨率不是很高 - 可能不超过10-20ms,但对于随机间隔可能无关紧要。

将它们放在一个简单的控制台应用程序中,可以得到以下结果:

using System;
using System.Threading;

namespace Demo
{
    public class Program
    {
        private static void Main()
        {
            bool value = false;

            int millseconds = new Random().Next(1000, 3001);
            var callback    = new Timer(dummy => { value = true; }, null, millseconds, -1);

            for (int i = 0; i < 100; ++i)
            {
                Thread.Sleep(100);
                Console.WriteLine(value);
            }

            callback.Dispose();
        }
    }
}