我有这个代码应该向窗口绘制两个卷图标,但它不起作用。以下是相关代码:
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);
}
答案 0 :(得分:2)
问题是ClientBounds.Right / Bottom在Windows屏幕坐标中(其中[0,0]是屏幕的左上角,右下角是你的分辨率,例如[1024,768])。
你真正想要的是在你自己的窗口右下角绘制它们。 XNA的SpriteBatch绘制视口坐标,其中[0,0]是视口的左上角,右下角是应用程序的分辨率,例如。 [800,480]。要获得该宽度,您只需使用Window.ClientBounds.Width而不是Window.ClientBounds.Right,而使用Window.ClientBounds.Height而不是Window.ClientBounds.Bottom。
希望这有帮助!