当布尔值发生更改但未更改回来时,会发生一些事情

时间:2014-05-03 21:24:30

标签: c# timer xna boolean xna-4.0

我需要这样做,以便当我的布尔值变为任何不是它时,某些事情会发生几秒钟然后停止,即使布尔值没有改变回来。

我还没想办法让事情发生几秒钟。检查也会不断发生,因此一旦布尔值发生变化,运动就会开始并且不会停止。

我可能听起来不太清楚,所以可以随意提出更具体的问题......

编辑:因为有几个人问,我特别需要我的一些游戏对象向下移动几秒钟然后停下来然后回到水平移动(想想太空侵略者)。

2 个答案:

答案 0 :(得分:2)

您应该通过使用处理逻辑的公共访问器和私有支持字段来查看properties

public bool Enabled
{
    get {
        return enabled;
    }
    set {
        if (value != enabled)
        {
            //Do Something if it changes
        }
        enabled = value;
    }
}
private bool enabled;

获取属性后执行get代码(例如:bool isEnabled = Enabled),并在设置属性时调用set(例如:Enabled = false)请注意,value是您向属性分配内容时传递的新值。

现在您知道如何在值更改时检查并执行代码,我们可以继续使用"""你想做几秒钟。

您可以使用System.TimersTimer)中的Tutorial以一定间隔运行代码(并在X间隔后停止代码),或者您可以使用{重复运行代码{1}}直到达到某个时间。以下提供的示例,

StopWatch

Timer timer = new Timer(3000);
timer.Elapsed += (object sender, ElapsedEventArgs e) => { Console.WriteLine("Something"); };
timer.Enabled = true;

所有代码都可以放入方法中并从Stopwatch stopWatch = new Stopwatch(); stopWatch.Restart(); while (true) { //If 3 seconds have elapsed, stop the operation if (stopWatch.ElapsedMilliseconds > 3000) { stopWatch.Stop(); break; } //Do stuff repeatedly Console.WriteLine("Something"); } 块调用。 (如果你需要使用属性的值,你应该将它作为参数传递,否则你可能会遇到问题,如果它发生了变化)

编辑:我没有看到这是一个XNA游戏,在这种情况下,您需要设置开始移动的时间,并继续移动直到当前时间超过开始时间,加上X金额:

示例:

有一个名为set的第三个值或其他值,您可以稍后在enabledChanged方法中使用,以便开始移动。获取开始移动的时间并将更改的标志设置为false。然后继续前进,直到当前Update超过所需时间。

GameTime

这实际上取决于你想做什么,但这是一个通用的解决方案。 (因为你的意思是在时间结束之前运行一些东西,完全停止操作?或者重复动作直到时间结束?)

答案 1 :(得分:-1)

好吧,你可以保存布尔值的最后一个值,然后如果它不等于当前值,那么将一个新的布尔值设置为true。

bool myBool = false;
bool lastValue = myBool;
bool doRunning = false;    

// Your loop
while (true) {
   .....
   if (myBool != lastValue) {
       doRunning = true;
       lastValue = myBool;
   }
}