Вам понадобится переменная, в которой вы будете хранить текущую релаксацию, и одну функцию, в которой вы определяете, какую клавишу нажать. Внутри вашего класса объектов положите 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 объект и над этой точкой объекта будет вращаться , для этого проверьте этот ответ: Rotating a sprite around its center
EDIT: GameTime У XNA есть две функции обновления. Рисование и обновление. Не смешивайте эти две функции. Используйте рисование только для рисования на экране и обновления для столкновения, перемещения объекта, объекта обновления. Система пытается выполнить это 60 раз в секунду, и если из-за слишком большого количества вычислений или более медленного компьютера он может опуститься ниже этого значения. (Кстати: XNA есть IsRunningSlowly
флаг, который устанавливается истина в данном случае)
Так что, если вы хотите, чтобы убедиться, что объект будет двигаться на 5 пикселей каждую миллисекунду нужно умножить свою ценность как то:
time = gameTime.ElapsedGameTime.TotalMilliseconds;
player.position.x += 5 * time;
Итак, если вы хотите повернуть объект на 0,1 радия в секунду:
time = gameTime.ElapsedGameTime.TotalSeconds;
player.rotate += 0.1 * time;
Большое вам спасибо! Он отлично работал. Если я могу спросить, есть ли способ сделать это, используя gameTime или deltaTime? – Leon
@Leon Я добавил еще несколько данных, пожалуйста, проверьте, полезно ли вам. –