作为个人工作,我必须在WPF中做一个森林火灾模拟。
我用网格创建了所有的地图,并使用了一个数组。Fire是通过一个随机数添加的(当ex : case =“Forest”时,在数组中)。大火正在燃烧所有的“森林案例”,这取决于风(N,S,E,W等)。一切都运行得很好!
但是我在"fire循环“中遇到了一个小问题。我的意思是,当我点击我的按钮‘fire progress’(进行火灾扩展)时,所有的森林案例都会同时燃烧。(方向是正确的,只有方向正确的案例才会燃烧,问题不在这里)。
我想要冷却这个循环,因为每个案例都会被烧毁,例如:
森林被烧毁的案例。等。案例森林2被烧毁。诸若此类。并不是所有的情况都在正确的方向(风向)。
我尝试使用调度程序计时器(TimeSpan )。但没有成功。唯一起作用的是循环的结果是速度变慢(以秒、毫秒、天为单位)。但所有的情况都会在同一时间发生变化。而不是一个接一个。
如果我的英语语法不正确,很抱歉!
下面是我的代码:
private void DeclencherLeFeu()
{
TempsDuJeu = new DispatcherTimer();
TempsDuJeu.Interval = TimeSpan.FromSeconds(1);
TempsDuJeu.Tick += new EventHandler(OnTimerGameEvent);
TempsDuJeu.Start();
TempsQueMetLeFeuPourBrulerLaForet = new DispatcherTimer();
TempsQueMetLeFeuPourBrulerLaForet.Interval = TimeSpan.FromSeconds(8);
TempsQueMetLeFeuPourBrulerLaForet.Tick += new EventHandler(LesArbresSontCalcines);
TempsQueMetLeFeuPourBrulerLaForet.Start();
}
注: LesArbresSontCalcines在英语中的意思是树木被烧毁。它调用一个函数,如下所示:
private void LesArbresSontCalcines(object sender, EventArgs e)
{
for (int i = 0; i < 7; i++)
{
for (int j = 1; j < 10; j++)
{
if (MonTableau[i, j].Name == "Feu")
{
MonTableau[i, j].Source = new BitmapImage(new Uri(@"E:\tp999\wpfapplication13\wpfapplication13\ArbreMort1.gif", UriKind.RelativeOrAbsolute));
ImageBehavior.SetAnimatedSource(MonTableau[i, j], new BitmapImage(new Uri(@"E:\tp999\wpfapplication13\wpfapplication13\ArbreMort1.gif", UriKind.RelativeOrAbsolute)));
MonTableau[i, j].Name = "Noir";
}
}
}
}
注意:所有的烧录案例(我在森林案例中使用了fire.gif )都替换为ArbreMort1.gif (代表一棵被黑的树)。
在我的代码的这一部分中,所有烧焦的情况都会在同一时间内发生变化,就像一棵死树一样。而不是一个接一个。
我试着这样做,第一个烧录案例将是第一个变暗(使用ArbreMort1.gif),依此类推,直到结束烧录案例(这将是最后一个被转换)。
如何使用此调度程序计时器?
感谢您的回复!:)
发布于 2017-03-13 05:38:32
您需要重新设计处理程序。创建类成员int7 j和int7= 0;
然后在带有i值的处理程序索引j数组中确定j索引是什么。然后递增j index,然后递增i mod 7,所以现在完成这个序列需要560秒。
发布于 2017-03-13 15:30:38
感谢您的回答!我会试着修复它!:)
祝你今天过得愉快!
https://stackoverflow.com/questions/42748713
复制相似问题