2011-10-08 92 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游戏重要组成部分角落的碰撞。