首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在wpf中冷却循环?森林火灾模拟

如何在wpf中冷却循环?森林火灾模拟
EN

Stack Overflow用户
提问于 2017-03-12 22:39:25
回答 2查看 60关注 0票数 0

作为个人工作,我必须在WPF中做一个森林火灾模拟。

我用网格创建了所有的地图,并使用了一个数组。Fire是通过一个随机数添加的(当ex : case =“Forest”时,在数组中)。大火正在燃烧所有的“森林案例”,这取决于风(N,S,E,W等)。一切都运行得很好!

但是我在"fire循环“中遇到了一个小问题。我的意思是,当我点击我的按钮‘fire progress’(进行火灾扩展)时,所有的森林案例都会同时燃烧。(方向是正确的,只有方向正确的案例才会燃烧,问题不在这里)。

我想要冷却这个循环,因为每个案例都会被烧毁,例如:

森林被烧毁的案例。等。案例森林2被烧毁。诸若此类。并不是所有的情况都在正确的方向(风向)。

我尝试使用调度程序计时器(TimeSpan )。但没有成功。唯一起作用的是循环的结果是速度变慢(以秒、毫秒、天为单位)。但所有的情况都会在同一时间发生变化。而不是一个接一个。

如果我的英语语法不正确,很抱歉!

下面是我的代码:

代码语言:javascript
运行
复制
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在英语中的意思是树木被烧毁。它调用一个函数,如下所示:

代码语言:javascript
运行
复制
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),依此类推,直到结束烧录案例(这将是最后一个被转换)。

如何使用此调度程序计时器?

感谢您的回复!:)

EN

回答 2

Stack Overflow用户

发布于 2017-03-13 05:38:32

您需要重新设计处理程序。创建类成员int7 j和int7= 0;

然后在带有i值的处理程序索引j数组中确定j索引是什么。然后递增j index,然后递增i mod 7,所以现在完成这个序列需要560秒。

票数 0
EN

Stack Overflow用户

发布于 2017-03-13 15:30:38

感谢您的回答!我会试着修复它!:)

祝你今天过得愉快!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42748713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档