我試圖重拍突破,而我的球偶爾會跳過瓷磚,或者不正確地彈起。我認爲我發現問題在於,我的代碼檢測球是從頂部,底部還是側面傳出,並沒有說明球的「臺階」尺寸可以使其落在瓦。我試過的唯一一件事就是防止了這些bug的發生,一直在減小步長,但這會讓球的移動速度比我想要的慢。那麼,我怎樣才能保持球的速度相同,同時仍然準確地檢測它碰撞的哪一側?如何檢測碰撞的一面?
Vector2 ballCenter = new Vector2();
Vector2 tileCenter = new Vector2();
ballCenter = ball.getHitbox().getCenter(ballCenter);
tileCenter = tiles.get(i-1).getHitbox().getCenter(tileCenter);
if(ballCenter.y-ball.sprite.getHeight()/2>tileCenter.y){
ball.velocity.y = Math.max((-1*ball.velocity.y)+2,10);
}
else if(ballCenter.y+ball.sprite.getHeight()/2<tileCenter.y){
ball.velocity.y = Math.max((-1*ball.velocity.y)-1,-10);
}
else
ball.velocity.x *=-1;
如果你保留了當前的位置和前一個位置,那麼你可以說「如果當前位置在磚塊之上,以前的位置低於球體向上移動」等等。然後,您可以計算出球首先碰到磚的位置以及以什麼角度計算得到的路徑。 –