2010-04-25 91 views
2

我很新XNA &遊戲開發和卡住球反射。無論蝙蝠處於哪個角度,我的球在擊中蝙蝠時都會反射,但只能以一個角度反射。2D遊戲 - 如何從球棒上反射球?

下面的代碼:

if (BallRect.Intersects(BatRect)) 
    { 
     Vector2 NormBallVelocity = Ball.velocity; 
     NormBallVelocity.Normalize(); 
     NormBallVelocity = Vector2.Reflect(Ball.velocity, NormBallVelocity); 
     Ball.velocity = NormBallVelocity; 
    } 

球被收回它的歸途。 我如何讓它看起來像球反射了蝙蝠?

我見過的其他職位,但他們是在3D面前,我太新,它翻譯成2D方面...

回答

4

我敢肯定,你需要反映了蝙蝠的正常的,而不是球的速度這很正常。

+0

ah beat'd。 +1這個 – Robb 2010-04-25 03:43:43

-1

您應該首先計算蝙蝠的水平距離(如在蹺蹺板的距離),然後將其旋轉90度以獲得球所需的角度。

+0

這不會考慮球的當前速度。您仍然需要從這個向量反映出來,而不是僅僅分配它。 – 2010-04-25 03:41:55

+0

你能花些時間來解釋你的想法嗎?我已經通過蝙蝠的速度反映了球,這是正常的,但在第二季度它仍然會持續45度。 爲什麼球沒有考慮任何變數? – sid 2010-04-25 16:24:15

+0

基本上,如果球在擊球時是直的左右球,那麼球應該或多或少地直線前進。如果蝙蝠(玩家沒有拿着)的末端距離屏幕底部比玩家的末端更近(假設球場從頂部進球),球就會向左走。如果它離屏幕較遠,那麼球就向右轉。對於混亂的解釋抱歉。 – RCIX 2010-04-26 00:59:58

1

參考MSDN Reflect Method,它看起來像你想反映的蝙蝠的速度和正常。

+0

我曾經嘗試過。 我剛剛在上面的代碼 中用蝙蝠代替了球,我不知道爲什麼,但它在第二象限中的角度恰好在45度,無論蝙蝠處於哪個角度,即使它必須穿過蝙蝠本身! 我也嘗試改變球的旋轉,但它沒有考慮到它。我該怎麼做!? – sid 2010-04-25 09:36:42

+0

看看這個問題:http://stackoverflow.com/questions/2212042/xna-collision-detection-vector2-reflect-help-calculating-the-normal-of-a-circ 這看起來你正在嘗試以一個非常明確的解釋來處理。 – Robb 2010-04-25 15:50:44