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;
}
僅有反轉軸的速度(倒數x速度當x < 0 or >寬度,倒數y速度當時<0 or y>高度) – ElDuderino