我正在制作一个游戏,我的球在圆环内弹跳。 据我所知,当球击中墙壁时,它会将其视为一面平坦的墙壁,并会以与正常角度成一定角度反弹。但是,我无法弄清楚如何找到该角度并对xVelocity和yVelocity进行适当的更改。
这是我到目前为止所做的:
left = ball.getBounds().left;
right = ball.getBounds().right;
top = ball.getBounds().top;
bottom = ball.getBounds().bottom;
left+=vX;
right+=vX;
top+=vY;
bottom+=vY;
ball.setBounds(left, top, right, bottom);
invalidate();
int relativeX = left - ring.getCenterX() + RADIUS;
int relativeY = top - ring.getCenterY() + RADIUS;
int relativeRadius = ring.getRadius() - deviceWidth/16 - RADIUS;
if(Math.pow(relativeX,2)+Math.pow(relativeY,2) >= Math.pow(relativeRadius ,2) && check) {
if(Math.abs(relativeX) > Math.abs(relativeY)) {
vX*=-1;
}
if(Math.abs(relativeX) < Math.abs(relativeY)) {
vY*=-1;
}
if(Math.abs(relativeX) == Math.abs(relativeY)) {
vX*=-1;
vY*=-1;
}
}
我使用毕达哥拉斯定理来找到球与圆圈(环)的内表面碰撞的点。但我知道我目前用来反弹球的代码是错误的,我无法弄清楚正确的方法是什么。