2011-10-08 127 views
1

嘿傢伙我正在做槳/乒乓球比賽和現在,我試圖找出如何做我的槳和我的球之間精確的碰撞。目前它是基本的碰撞,如果球擊中左側集合X的速度和Ÿ速度..等,但我想弄清楚如何使它在一個方向反彈的可以這麼說,如下圖所示:C#XNA精確碰撞?

enter image description here

有沒有辦法做到這一點?非常感激任何的幫助。

回答

2

你的例子可以通過否定y速度並保持x速度進行處理。球和槳的角部之間

碰撞都比較困難。您需要找到確切的碰撞點,然後計算從球的中心到碰撞點的矢量。最後否定沿該軸的速度,同時保持組件處於正交軸的方向。

0

我知道這不會是你現在的情況有所幫助,但你可以嘗試使用像先知一個已經取得物理引擎很容易爲你處理這些衝突。

0
protected override void Update(GameTime gameTime) 
{ 
    ballrect = new Rectangle((int)ballpos.X, (int)ballpos.Y, 
          ball.Width, ball.Height); 

    paddlerect = new Rectangle((int)paddlepos.X, (int)paddlepos.Y, 
           paddle.Width, paddle.Height); 

    ms = Mouse.GetState(); 
    paddlepos.X = ms.X; 

    if (ballrect.Intersects(paddlerect)) 
    { 
     bhpaddle(); 
    } 

    ballpos += ballvel; 

    if (ballrect.Y>= paddlerect.Y) 
    { 
     ballpos = new Vector2(400, 480); 
     bhpaddle(); 
     ballpos += ballvel; 
     l--; 
    } 

    base.Update(gameTime); 
} 



public void bhpaddle() 
{ 
    ballvel.Y *= -1; 
} 
1

小心重影。和我的意思是,球的速度可以足夠大,沒有任何幀(或更新程序呼叫),其中皮球竟然與蝙蝠相交,所以你不會檢測衝突。看我的插圖。其中,兩個不同框架的球與蝙蝠相交,儘管沒有直接交叉。這樣做的結果將會是球穿過蝙蝠並神奇地出現在另一側。

爲了解決這個問題,你不能用球的位置來計算,如果有一個路口,你需要計算球每一幀的新舊位置之間的差異看看這條線(差異)是否與蝙蝠在任何點相交。

最簡單的辦法來解決,這將是考慮的蝙蝠爲水平線,那麼你可以做一個簡單的交線檢查。如果它們相交,就會發生碰撞。更復雜的方式是做一個線/矢量矩形交集。這樣做的好處在於,您還可以檢測與pong/breakout遊戲重要組成部分角落的碰撞。