簡體   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