雪碧根本不会渲染?

时间:2016-01-17 04:56:47

标签: c# xna monogame

这些课程如下:

Game
has-a Player

Player
has-a SpriteInstance

SpriteInstance
has-a List<SpriteInstance>

每个渲染步骤GameDraw()上调用PlayerPlayerdraw()上致电SpriteInstancedraw()看起来像这样:

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循环确实会显示,但我不知道区别是什么......它也不是一个正确的修复。

1 个答案:

答案 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.
}

如果这不起作用,我希望看到您的主类,以及运行应用程序时获得的输出副本。还请列出发生的任何错误。