我正在开发一个XNA项目,其中有两个 DrawableGameComponents A 和 B ,具有以下约束:
目前, A 和 B 都在同一个线程中执行。但是,它们的“更新”方法是非常强大的CPU。由于两个GameComponents不需要相互通信,并且两个GameComponents都不需要共享任何数据,因此很容易并行化它们。
我想知道的是如何在XNA中做到这一点。 “更新”和“绘制”方法由XNA Framework调用,因此我不知道将线程放在何处。有没有一种标准的方法呢?
答案 0 :(得分:1)
通常这是通过游戏状态管理来完成的,其中Game1
类(默认类)用于调用其他类的Update()
和/或Draw()
(游戏组件)< / p>
看看xnadevelopment游戏状态管理教程,他们描述了如何调用不同的更新和不同类的绘制,希望你会看到可以在Game1类中实现多线程(默认自动创建的XNA类)
P.S。如果你不介意做很多阅读,请看一下XNA多线程上的这个article,它附带一些解释它如何工作的图表。
答案 1 :(得分:0)
您尚未指定是否需要同时运行两个Update,因此我假设只有一个组件是需要绘制的。
使用DrawableGameComponents
它们会自动与您的Game
对象同步,但是,如果您存储对每个组件的引用,而不是在没有存储引用的情况下实例化它们,例如:
componentOne = new FirstComponenet(this);
Components.Add(componentOne);
componentTwo = new SecondComponent(this);
Components.Add(componentTwo);
// Immediately disable componetTwo
componentTwo.Enabled = false; // Prevents Update from firing
componentTwo.Visible = false; // Prevents Draw from firing (for Drawable components only)
然后你可以让XNA按照正常情况管理Update / Draw循环。 componentOne
和componentTwo
是类级变量,您可以管理每个变量的活动时间。
同样,这是基于这样的假设,即你不需要在另一个人的同时更新。