C# XNA,如何绘制所有可绘制的游戏对象?
我记得不久前看到了一些绘制和更新所有drawablegameobjects的方法。我认为这是一个foreach循环,比如C# XNA,如何绘制所有可绘制的游戏对象?,c#,xna,C#,Xna,我记得不久前看到了一些绘制和更新所有drawablegameobjects的方法。我认为这是一个foreach循环,比如 foreach(DrawableGameComponent dgc in Game.Components) 有人能告诉我做这件事的正确方法吗?或者他们是否知道这方面的教程 谢谢 您是正确的,您可以简单地在Components数组中的每个项上循环,并调用它的draw方法,但是有一些事情需要考虑,下面的代码应该适合您 如果这对你来说不重要,你可能不需要用提款单,而且
foreach(DrawableGameComponent dgc in Game.Components)
有人能告诉我做这件事的正确方法吗?或者他们是否知道这方面的教程
谢谢 您是正确的,您可以简单地在Components数组中的每个项上循环,并调用它的draw方法,但是有一些事情需要考虑,下面的代码应该适合您 如果这对你来说不重要,你可能不需要用提款单,而且你可能不应该用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);
}
您可以这样做:
foreach(var dgc in Game.Components.OfType<DrawableGameComponent>()
.OrderBy(x => x.DrawOrder))
{
}
foreach(Game.Components.OfType()中的var dgc)
.OrderBy(x=>x.DrawOrder))
{
}
由于对象可能会扩展DrawableGameObject,因此您始终可以将其添加到游戏组件中:
class MyGame: Game
{
//...Your code
override public Load()
{
//... YOURCODE
Components.Add(myDrawableObj);
}
}
您会注意到,只要您有base.Update();&base.Draw();在游戏的I更新和绘制方法中,所有游戏组件都将自动更新和绘制。如果在组件中添加了非视觉游戏组件,则此代码将崩溃。常规的
GameComponent
或IGameComponent
不能强制转换到IDrawable
界面以查询抽签顺序。你必须先检查一下类型。实际上,在我看来,这是最好的答案。我将向Linq查询添加一个.Where(x=>x.Visible)
。