我记得不久前看到了一些绘制和更新所有可绘制游戏对象的方法。我认为这是一个 foreach 循环,例如
foreach(DrawableGameComponent dgc in Game.Components)
有人可以告诉我正确的方法吗,或者他们是否知道它的教程?
谢谢!
你可以这样做:
foreach(var dgc in Game.Components.OfType<DrawableGameComponent>()
.OrderBy(x => x.DrawOrder))
{
}
你是对的,你可以简单地遍历 Components 数组中的每个项目并调用它的 draw 方法,但是你应该考虑一些事情,下面的代码应该适合你。
如果它对您无关紧要,您可能不需要通过 DrawOrder 订购,而且您可能不应该使用 linq 来订购,因为它非常慢,但可以。
foreach (var component in Components.OrderBy(x => ((IDrawable)x).DrawOrder))
if (component is IDrawable)
{
IDrawable drawableComponent = (IDrawable)component;
if (drawableComponent.Visible)
drawableComponent.Draw(gameTime);
}
由于对象可能会扩展 DrawableGameObject,因此您始终可以将其添加到游戏组件中:
class MyGame: Game
{
//...Your code
override public Load()
{
//... YOURCODE
Components.Add(myDrawableObj);
}
}
你会注意到他们会开始自己画画:)