[英]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.