1
所以我在android studio中做了一個突破遊戲。(Java)在突破遊戲中使用矢量碰撞
在製作了一個遊戲循環和與槳和磚的基本碰撞後,我注意到我的球已經開始通過我的磚和槳在增加速度後進行剪輯。
問題在於它在一幀中碰撞了兩次,所以我的基本碰撞是不夠的。
我讀過關於使用矢量數學解決方案。但是對我來說這太過分了,因此我的頭也圍繞着它。 我指的是這個問題的答案: Refer Here
if (RectF.intersects(bricks[i].getRect(), ball.getRect())) {
Brick brick = bricks[i];
if(ball.getRect().centerX()>brick.minX() && ball.getRect().centerX() < brick.maxX()){
ball.reverseYVelocity();
if(ball.getRect().top > brick.getRect().centerY()){
ball.clearObstacleY(brick.getRect().bottom - ball.getRect().height());
} else {
ball.clearObstacleY(brick.getRect().top + ball.getRect().height());
}
} else {
ball.reverseXVelocity();
if(ball.getRect().left > brick.getRect().centerX()){
ball.clearObstacleX(brick.getRect().right + ball.getRect().width());
} else {
ball.clearObstacleX(brick.getRect().left - ball.getRect().width());
}
}
而且我的球更新:
public void update(long fps, float speed){
rect.left = rect.left + (xVelocity*speed/fps);
rect.top = rect.top + (yVelocity*speed/fps);
rect.right = rect.left + ballWidth;
rect.bottom = rect.top - ballHeight;
}
那麼我將如何改變這個弄成這個樣子: Demo
提前致謝!
我的FPS設定爲60 但我認爲解決的辦法是,如果我的下一個球的位置攔截任何塊或槳看到,如果不將其設置爲最接近的牆壁並反轉速度。 – MrPako
不正確!如上所述,當您檢測到碰撞時,您應該在碰撞發生之前將球的位置設置到先前的位置,然後您可以反轉所有不考慮偏轉角度的速度。所以你需要存儲每個循環的前一幀位置 – Rob85
嗯。但是如果球的位置非常遠並且球非常快,那麼它可能會錯過碰撞。實際上,我終於弄明白了,在我把所有的東西都工作後,我會發布我的答案:D – MrPako