作为个人工作,我必须在WPF中进行森林火灾模拟。
我使用网格创建了所有地图,并使用了数组。 Fire通过随机数添加(在ex:case =“Forest”时在数组中)。 火正在燃烧所有“森林案例”,它取决于风(N S E W等)。一切都很好!
但是我通过“火圈”遇到了一个小问题。我的意思是,当我点击我的按钮'火进度'(进行火灾扩展)时,所有的森林案例都会同时燃烧。(方向是正确的,只有正确方向的情况才会燃烧,问题不在这里)。
我想冷却这个循环,因为每个案例都会被烧掉,例如:
案例森林烧伤。等待。案例森林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),依此类推,直到结束燃烧的情况(这将是最后一个被转换)。
我应该如何使用此调度程序计时器?
感谢您的回复! :)
答案 0 :(得分:0)
您需要重新构建处理程序。创建类成员int [7] j和int i = 0;
然后在处理程序索引j数组中使用i值来确定j索引是什么。然后递增j索引然后递增i mod 7.所以现在需要560秒才能完成序列。
答案 1 :(得分:0)
感谢您的回答!我会尽力解决它! :)
度过美好的一天!