如何旋转2D对象?

时间:2015-02-22 18:32:22

标签: c# xna xna-4.0

我试图搜索这个但是所有的结果都非常接近我需要但不完全相同的结果。所以我不得不问,如何使用我们的键盘作为输入来旋转2D对象? 更具体地说,如果我按下&按住左箭头键,2D对象将向左旋转(逆时针),反之亦然。我还应该提到2D物体是静止的。

position = new Vector2(box.X, 475);// 475 is the gameWindow height
//box.X is for when I have to move the object along the X-axis.

这是我当前2D对象的位置,它位于底部。我猜它几乎就像那些大理石射击类型的东西(Marble buster,Sparkle unleashed等......)。

1 个答案:

答案 0 :(得分:2)

您将需要一些变量来存储当前的roatation,以及一个函数,您将确定按下哪个键。 在你的对象类中放入Rotation = 0.0f;将用于此目的。

然后在你的更新方法中你需要这个:

KeyboardState keyBoardState = Keyboard.GetState();
if (keyBoardState.IsKeyDown(Keys.Left)){Rotation -= 0.1f;}
if (keyBoardState.IsKeyDown(Keys.Right)){Rotation += 0.1f;}

然后在绘制方法中:

spriteBatch.Begin();
spriteBatch.Draw(Texture, Position, null, Color.White, Rotation, ObjectCenter, 1.0f, SpriteEffects.None, 0);
spriteBatch.End();

您还需要ObjectCenter变量,它是vector2对象,并且该点对象将旋转。为此检查这个答案:Rotating a sprite around its center

编辑:GameTime XNA有两个更新功能。绘制和更新。不要混用这两个功能。使用绘制仅绘制到屏幕并更新碰撞,移动对象,更新对象。系统尝试每秒执行60次,如果计算量太大或计算机速度较慢,则可能低于该值。 (顺便说一句:XNA有IsRunningSlowly标志,在这种情况下设置为true)

因此,如果您希望确保对象每毫秒移动5个像素,则必须将您的值乘以:

time = gameTime.ElapsedGameTime.TotalMilliseconds;
player.position.x += 5 * time;

因此,如果您希望以每秒0.1弧度的速度旋转对象:

time = gameTime.ElapsedGameTime.TotalSeconds;
player.rotate += 0.1 * time;