2014-04-08 204 views
0

從Pong比賽中,我已經獲得了讓球在X軸的牆上反彈的邏輯。這是使這個邏輯:遊戲:球反彈邏輯

主要方法:

protected void handleBounces(float px, float py) { 
     /*Rebound on X-axis*/ 
     if(mBall.x <= Ball.RADIUS || mBall.x >= getWidth() - Ball.RADIUS) { 
      mBall.bounceWall(); 
      if(mBall.x == Ball.RADIUS) 
       mBall.x++; 
      else 
       mBall.x--; 
     } 
} 

球邏輯:

public void bounceWall() { 
      setAngle(3 * Math.PI - mAngle); 
} 

public void setAngle(double angle) { 
      mAngle = angle % (2 * Math.PI); 
      mAngle = boundAngle(mAngle); 
      findVector(); 
} 

protected double boundAngle(double angle) { 
      return boundAngle(angle, angle >= Math.PI); 
} 

protected void findVector() { 
      vx = (float) (speed * Math.cos(mAngle)); 
      vy = (float) (speed * Math.sin(mAngle)); 
} 

現在,我需要做的是相同的,但對於Y-軸的頂端,這是。我正在爲乒乓球比賽做一個mod,這個比賽只包括一個槳(底部),球必須在其他三面牆上反彈。如上所述,我使它在X軸牆上反彈,但現在我需要使它在屏幕頂端(Y軸頂端)反彈。

我嘗試了幾種方法,但球沒有反彈。我想,有了這樣的一個實現,它應該工作,但不起作用,球繼續,並在頂​​部自敗:

主要方法:

protected void handleTopFastBounce(float px, float py) { 
     if(mBall.goingUp() == false) return; 

     if(mBall.y <= Ball.RADIUS) { 
      mBall.bounceWall(); 
      playSound(mWallSFX); 
      if (mBall.y == Ball.RADIUS) { 
       mBall.y++; 
      } 
     } 
} 

球邏輯:同如對上述方法,但添加這個方法:

public boolean goingUp() { 
      return mAngle >= Math.PI; 
} 

回答

0

最後我解決我自己的:

只要有使該器官功能障礙綜合徵:

主要方法:

protected void handleTopFastBounce() { 
     if(mBall.goingUp() == false) return; 

     if(mBall.y <= Ball.RADIUS) { 
      mBall.bounceTop(); 
      mBall.y++; 
     } 
} 

球邏輯:創建一個新的方法修改所述bounceWall()方法:

public void bounceTop() { 
      setAngle(4 * Math.PI - mAngle); 
} 
+0

僅有反轉軸的速度(倒數x速度當x < 0 or >寬度,倒數y速度當時<0 or y>高度) – ElDuderino