2013-03-20 122 views
0

我一直在使用processing.js处理基本的Pong克隆。目前我有一个球可以在两名球员控制的桨之间来回跳动。我的问题是,我检测球和桨的碰撞的算法颠倒了球,但为最右边的桨留下了不切实际的间隙。我使用碰撞检测方法如下:将其全部减少processing.js碰撞检测中对象之间的空间

/* 
    * Collision detection 
    */ 
    void Collide(PongBall ball, Paddle pPaddle) 
    { 

     float paddleX = pPaddle.x; 

     if(ball.directionX == -1) 
     { 
      //moving backwards 
      float paddleFront = pPaddle.x + pPaddle.width + ball.mass/2; 
      float paddleBack = pPaddle.x; 


      if((ball.x <= paddleFront && ball.x >= paddleBack) 
       && (ball.y >= pPaddle.y - pPaddle.height - ball.mass) 
       && (ball.y <= pPaddle.y + pPaddle.height + ball.mass)) 
      { 
       //contact with paddle 
       debugger; 
       ball.velocity.x *= -1; 
       ball.directionX *= -1; 
      } 
     } 
     else if(ball.directionX == 1) 
     { 
      //moving forwards 
      float paddleFront = pPaddle.x - pPaddle.width - ball.mass/2; 
      float paddleBack = pPaddle.x; 


      if((ball.x >= paddleFront && ball.x <= paddleBack) 
       && (ball.y >= pPaddle.y - pPaddle.height - ball.mass) 
       && (ball.y <= pPaddle.y +pPaddle.height + ball.mass)) 
      { 
       debugger; 
       ball.velocity.x *= -1; 
       ball.directionX *= -1; 
      } 
     } 
    } 

的代码/示例位于的jsfiddle here

我可以调整通过消除ball.mass/2计算最右边桨paddleBack值等,这样的碰撞看起来更好缓和值的价值,但我想明白了,为什么计算碰撞上左侧与右侧不同? 预先感谢您。

回答

0

我有预感

 //moving forwards 
     float paddleFront = pPaddle.x - pPaddle.width + ball.mass/2; 
     float paddleBack = pPaddle.x; 

+ ball.mass/2代替- ball.mass/2带来的变化

+0

谢谢你,做正确的问题。我想我错误地认为矩形的x实际上是最左边的时候总是最内层的。 – Christian 2013-03-20 18:48:49

+0

并感谢您向我介绍processing.js。去这里有很多的乐趣:) – Ozzy 2013-03-20 18:54:08

+0

非常欢迎,这是相当漂亮。 – Christian 2013-03-20 19:01:47