[英]Best method to simulate rotation of a projectile in 2D?
因此,我正在為正在參加的課程開發2D城堡防御風格的游戲,並且在嘗試獲得玩家射擊時拋射弧線正確旋轉時遇到的困難。 我敢肯定你們中的許多人以前都玩過類似的游戲,但是例如,在這里,正是我想要實現的目標的鏈接。
http://www.lostvectors.com/prelude/
我目前有一個箭課程:
public class Arrow
{
public Texture2D arrowSprite;
public double Xvelocity;
public double Yvelocity;
public int currentXpos;
public int currentYpos;
public int oldXpos;
public int oldYpos;
public float currentAngle;
public float oldAngle;
public Arrow()
{
arrowSprite = WindowsGame1.Game1.arrow;
Xvelocity = 10;
Yvelocity = 10;
currentXpos = 850;
currentYpos = 200;
}
}
注意:在使動畫正常工作之前,我設置的初始值就位。 解決此問題后,將根據用戶輸入設置值。
我的更新方法中包含以下代碼來更新箭頭:
foreach (Player.Arrow arrow in onscreenArrows)
{
arrow.oldXpos = arrow.currentXpos;
arrow.oldYpos = arrow.currentYpos;
arrow.currentXpos -= Convert.ToInt32(arrow.Xvelocity);
arrow.currentYpos -= Convert.ToInt32(arrow.Yvelocity);
arrow.oldAngle = arrow.currentAngle;
arrow.currentAngle = Convert.ToSingle(Math.Atan(arrow.Yvelocity/arrow.Xvelocity) * 180 / Math.PI);
arrow.Yvelocity -= 1;
}
這是我的draw方法中的代碼段:
foreach (Player.Arrow arrow in onscreenArrows)
{
spriteBatch.Draw(arrow.arrowSprite, new Vector2(arrow.currentXpos, arrow.currentYpos), null, Color.White, arrow.currentAngle - arrow.oldAngle, new Vector2(0, 4), 1.0f, SpriteEffects.None, 0);
}
為了清楚起見,箭頭從屏幕的右側發射,向左移動。 非常抱歉我的代碼很亂。 我對游戲編程還是很陌生,我一直在嘗試使動畫正常工作,然后再執行其他操作。 任何建議將是非常有益的,非常感謝,謝謝!
您的代碼實際上看起來不錯。 我看到的唯一錯誤是,您正在將spriteBatch.Draw函數傳遞為:
arrow.currentAngle - arrow.oldAngle
提供給SpriteBatch.Draw的旋轉是絕對旋轉( MSDN ),因此您只需將其傳遞給arrow.currentAngle
需要明確的是,當前沒有傳遞最后一幀的內存時,當前傳遞的是與最后一幀的角度變化(δ或相對角度)。 您應該給它繪制角度。
更新錯過了數學上的一些問題。
Math.Atan返回一個弧度,而spriteBatch.Draw則期望一個弧度,因此您無需在度和弧度之間進行轉換(實際上,這可能就是為什么您看到它瘋狂地跳躍)。
如果您正確旅行,您的數學將獲得正確的角度。 要使其向左移動,請采取180度並減去計算出的角度。
經過這些改進,您的代碼將變為:
arrow.currentAngle = Math.Pi - Math.Atan(arrow.Yvelocity/arrow.Xvelocity);
讓我知道事情的后續!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.