C# XNA没有画我告诉它的东西

C# XNA没有画我告诉它的东西,c#,xna,drawing,sprite,xna-4.0,C#,Xna,Drawing,Sprite,Xna 4.0,我有这段代码,应该画两个音量图标的窗口,但它不工作。以下是相关代码: Texture2D vol_max; Vector2 vol_max_vect; Texture2D vol_min; Vector2 vol_min_vect; ... protected override void LoadContent() { // Create a new SpriteBatch, which can be used to dra

我有这段代码,应该画两个音量图标的窗口,但它不工作。以下是相关代码:

    Texture2D vol_max;
    Vector2 vol_max_vect;
    Texture2D vol_min;
    Vector2 vol_min_vect;
    ...
    protected override void LoadContent()
    {
        // Create a new SpriteBatch, which can be used to draw textures.
        spriteBatch = new SpriteBatch(GraphicsDevice);

        vol_max = Content.Load<Texture2D>("vol_max@16");
        vol_min = Content.Load<Texture2D>("vol_min@16");
    }
    protected override void Update(GameTime gameTime)
    {
        thisKeyboard = Keyboard.GetState(PlayerIndex.One);

        if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed ||
            thisKeyboard.IsKeyDown(Keys.Escape))
        {
            this.Exit();
        }

        // Update window vectors
        vol_max_vect = new Vector2(
            (float)(Window.ClientBounds.Right - 20),
            (float)(Window.ClientBounds.Bottom - 20));
        vol_min_vect = new Vector2(
            (float)(Window.ClientBounds.Right - 140),
            (float)(Window.ClientBounds.Bottom - 20));

        prevKeyboard = thisKeyboard;

        base.Update(gameTime);
    }

    protected override void Draw(GameTime gameTime)
    {
        GraphicsDevice.Clear(Color.CornflowerBlue);

        spriteBatch.Begin();
        spriteBatch.Draw(
            vol_max,
            vol_max_vect,
            Color.White);
        spriteBatch.Draw(
            vol_min,
            vol_min_vect,
            Color.White);
        spriteBatch.End();

        base.Draw(gameTime);
    }
Texture2D vol_max;
矢量2体积最大矢量;
纹理2d体积最小;
向量2卷最小向量;
...
受保护的覆盖void LoadContent()
{
//创建一个新的SpriteBatch,可用于绘制纹理。
spriteBatch=新spriteBatch(图形设备);
vol_max=Content.Load(“vol_max@16");
vol_min=内容加载(“vol_min@16");
}
受保护覆盖无效更新(游戏时间游戏时间)
{
thisKeyboard=Keyboard.GetState(PlayerIndex.One);
if(GamePad.GetState(PlayerIndex.One).Buttons.Back==ButtonState.Pressed||
此键盘。IsKeyDown(键。Escape))
{
这是Exit();
}
//更新窗口向量
vol_max_vect=新矢量2(
(float)(Window.ClientBounds.Right-20),
(float)(Window.ClientBounds.Bottom-20);
vol_min_vect=新矢量2(
(float)(Window.ClientBounds.Right-140),
(float)(Window.ClientBounds.Bottom-20);
prevKeyboard=此键盘;
更新(游戏时间);
}
受保护覆盖无效绘制(游戏时间游戏时间)
{
图形设备。清晰(颜色:矢车菊蓝);
spriteBatch.Begin();
spriteBatch.画图(
最大体积,
最大体积,
颜色(白色);
spriteBatch.画图(
沃鲁敏,
卷最小向量,
颜色(白色);
spriteBatch.End();
基础。抽签(游戏时间);
}

问题在于ClientBounds.Right/Bottom在Windows屏幕坐标中(其中[0,0]是屏幕的左上角,右下角是分辨率,例如[1024768])

您真正想要的是在自己窗口的右下角绘制它们。XNA的SpriteBatch以视口坐标绘制,其中[0,0]是视口的左上角,右下角是应用程序的分辨率,例如[800480]。要获得该宽度,只需使用Window.ClientBounds.width而不是Window.ClientBounds.Right,以及Window.ClientBounds.Height而不是Window.ClientBounds.Bottom

希望这有帮助