我的 Sprite 没有在屏幕上绘制 XNA

my Sprite isnt drawing on screen XNA

我在这里错过了什么

雪碧Class

    private Texture2D m_tex;
    public Rectangle rect;
    private bool m_travellingRight;
    private int x_pos;

    //constructor
    public LightSaber(Texture2D tex, int xpos, int ypos)
    {
        m_tex = tex;
        rect = new Rectangle(xpos, ypos, m_tex.Width, m_tex.Height);
        m_travellingRight = true;
    }

    public void drawme(SpriteBatch sb)
    {
        if (m_travellingRight)
            sb.Draw(m_tex, rect, Color.White);
        else
            sb.Draw(m_tex, rect, null, Color.White, 0, Vector2.Zero, SpriteEffects.FlipHorizontally, 0);
    }

    public void updateme(GamePadState pad)
    {
        x_pos = rect.X;
        if (pad.ThumbSticks.Left.X < 0 && x_pos > 0)
        {
            m_travellingRight = false;
            rect.X -= 4;
        }
        else if (pad.ThumbSticks.Left.X > 0 && x_pos < 800 - rect.Width)
        {
            m_travellingRight = true;
            rect.X += 4;
        }
    }
}

}

游戏 1:

LightSaber lightSaber;

lightSaber = new LightSaber(Content.Load<Texture2D>("Textures\Lightsaber"), 300, 500);

lightSaber.drawme(spriteBatch);

感谢您的帮助。

我在 Game1.class 中遗漏了很多代码,很高兴看到整个 class 看看您是否遗漏了什么。

所以现在,我会给你一些提示:

  • 我在 game1 class 中没有看到任何 spritebatch.begin() 或 spritebatch.End(),因为它被缩短了,这些应该是必需的为了画什么。

  • 您也可以尝试在应该绘制纹理的那一刻设置断点。并检查它是否确实绘制了它,或者至少可以到达它。

  • 另一种可能,它确实绘制了精灵,但是它的位置超出了范围,(在游戏之外window),我更喜欢将位置放在0直到我确定它可以绘制纹理

  • 此外,在使用不带大括号的语句时请注意。因为没有它们,它只能读取语句后的一行代码。如果您添加新行或注释掉该语句,则会出现意外行为。 (我以前犯过那个错误)。

暂时就这些,希望对您有所帮助