XNA,如何绘制所有DrawableGameObjects?

时间:2012-05-31 16:17:28

标签: c# xna

我记得有一段时间看到一些绘制和更新所有drawablegameobjects的方法。我认为这是一个foreach循环,如

      foreach(DrawableGameComponent dgc in Game.Components)

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

谢谢!

3 个答案:

答案 0 :(得分:1)

你可以这样做:

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

}

答案 1 :(得分: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);
  }

答案 2 :(得分:0)

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

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

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