这些课程如下:
Game
has-a Player
Player
has-a SpriteInstance
SpriteInstance
has-a List<SpriteInstance>
每个渲染步骤Game
在Draw()
上调用Player
。 Player
在draw()
上致电SpriteInstance
。 draw()
看起来像这样:
public void draw(SpriteBatch spriteBatch, Vector2 offset = default(Vector2), float rotation = 0f)
{
spriteBatch.Draw(texture, offset + pos, null, Color.White, rot+rotation, sprite.origin, 1f, SpriteEffects.None, z);
foreach (var child in children)
{
child.draw(spriteBatch, offset + pos, rotation + rot);
}
}
我的预期输出能够在屏幕上看到SpriteInstance,和来自SpriteInstance的每个子节点的每个纹理,但我的实际输出只是SpriteInstance而没有子节点。我尝试过使用调试器,但它表明孩子的draw()函数肯定被调用了。因为spriteBatch
是一个神奇的黑匣子,所以我可以去......
传递spriteBatch有什么不对吗?我应该以某种方式通过引用来传递值吗?
编辑:这里是所有绘图功能
游戏
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.CornflowerBlue);
// TODO: Add your drawing code here
spriteBatch.Begin();// sortMode: SpriteSortMode.FrontToBack);
player.Draw(spriteBatch);
spriteBatch.End();
base.Draw(gameTime);
}
播放器
public void Draw(SpriteBatch spriteBatch)
{
sprite.draw(spriteBatch);
}
EDIT2 :
将spriteBatch.draw()调用到foreach循环确实会显示,但我不知道区别是什么......它也不是一个正确的修复。
答案 0 :(得分:0)
试试这个并告诉我它是否有效。
public void draw(SpriteBatch spriteBatch, Vector2 offset = default(Vector2), float rotation = 0f)
{
spriteBatch.Begin(); //Starts the drawing loop
spriteBatch.Draw(texture, offset + pos, null, Color.White, rot+rotation, sprite.origin, 1f, SpriteEffects.None, z);
foreach (var child in children)
{
child.draw(spriteBatch, offset + pos, rotation + rot);
}
spriteBatch.End(); // This is for ending the drawing loop.
}
如果这不起作用,我希望看到您的主类,以及运行应用程序时获得的输出副本。还请列出发生的任何错误。