昨天我在 XNA 中使用视口做一些事情,但无法弄清楚为什么我使用的精灵在更改位置时比我的视口移动得更快。我有一种感觉,它可能与不同的值类型(int vs. float)有关,但有人愿意详细说明吗?
这是我使用的代码...
Viewport myViewport;
Texture2D t;
SpriteFont f;
Vector2 point = new Vector2(0, 0);
/// <summary>
/// Allows the game to run logic such as updating the world,
/// checking for collisions, gathering input, and playing audio.
/// </summary>
/// <param name="gameTime">Provides a snapshot of timing values.</param>
protected override void Update(GameTime gameTime)
{
// Allows the game to exit
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
this.Exit();
Keys[] pressedKeys = Keyboard.GetState().GetPressedKeys();
for (int i = 0; i < pressedKeys.Length; i++)
{
if (pressedKeys[i] == Keys.W)
{
point.Y--;
}
else if (pressedKeys[i] == Keys.A)
{
point.X--;
}
else if (pressedKeys[i] == Keys.S)
{
point.Y++;
}
else if (pressedKeys[i] == Keys.D)
{
point.X++;
}
}
myViewport.X = (int)point.X;
myViewport.Y = (int)point.Y;
GraphicsDevice.Viewport = myViewport;
// TODO: Add your update logic here
base.Update(gameTime);
}
/// <summary>
/// This is called when the game should draw itself.
/// </summary>
/// <param name="gameTime">Provides a snapshot of timing values.</param>
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.White);
spriteBatch.Begin();
spriteBatch.Draw(t, new Vector2(point.X, point.Y), Color.White);
spriteBatch.End();
// TODO: Add your drawing code here
base.Draw(gameTime);
}