精灵根本不会渲染
本文关键字:精灵 | 更新日期: 2023-09-27 18:30:44
类看起来像这样:
Game
has-a Player
Player
has-a SpriteInstance
SpriteInstance
has-a List<SpriteInstance>
每个渲染步骤,Game
调用Draw()
Player
。 Player
SpriteInstance
上打电话draw()
。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);
}
}
我的预期输出是能够在屏幕上看到精灵实例,以及来自精灵实例的每个子级的每个纹理,但我的实际输出只是精灵实例,没有子级。我尝试使用调试器,但它表明孩子的 draw() 函数肯定被调用了。而且由于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);
}
编辑2:
将 spriteBatch.draw() 调用引入 foreach 循环确实可以显示它,但我不知道有什么区别......这也不是一个正确的解决方案。
试试这个,让我知道它是否有效。
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.
}
如果这不起作用,我希望看到您的主类,以及您在运行应用程序时获得的输出的副本。还请列出发生的任何错误。