繁体   English   中英

如何旋转2D对象?

[英]How to rotate 2D object?

我尝试进行搜索,但是所有结果都确实接近我需要的结果,但并不完全相同。 因此,我不得不问,如何使用键盘作为输入来旋转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对象的位置,它位于底部。 我猜这几乎和那些大理石射击游戏类型中的一种(大理石克星,释放的火花等等)类似。

您将需要一个变量来存储当前轮换,并需要一个函数来确定按下的键。 在您的对象类中放入Rotation = 0.0f; 将用于什么。

然后在您的更新方法中,您需要:

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

然后在draw方法中:

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

您还需要ObjectCenter变量,它是vector2对象,并且在该点上对象将旋转。 为此检查此答案: 围绕其中心旋转精灵

编辑:GameTime XNA具有两个更新功能。 绘制和更新。 请勿混用这两个功能。 仅将draw用于屏幕绘制,并更新碰撞,移动对象,更新对象。 系统尝试每秒执行此操作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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM