0

我记得不久前看到了一些绘制和更新所有可绘制游戏对象的方法。我认为这是一个 foreach 循环,例如

      foreach(DrawableGameComponent dgc in Game.Components)

有人可以告诉我正确的方法吗,或者他们是否知道它的教程?

谢谢!

4

3 回答 3

1

你可以这样做:

foreach(var dgc in Game.Components.OfType<DrawableGameComponent>()
                                  .OrderBy(x => x.DrawOrder))
{

}
于 2012-05-31T18:03:00.447 回答
0

你是对的,你可以简单地遍历 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);
  }
于 2012-05-31T17:39:17.020 回答
0

由于对象可能会扩展 DrawableGameObject,因此您始终可以将其添加到游戏组件中:

class MyGame: Game
{
     //...Your code
     override public Load()
     {
           //... YOURCODE  
           Components.Add(myDrawableObj);
     }
 }

你会注意到他们会开始自己画画:)

于 2013-03-20T15:09:35.057 回答