弯曲表面的弹跳

时间:2017-06-07 18:15:44

标签: java android

我正在制作一个游戏,我的球在圆环内弹跳。 据我所知,当球击中墙壁时,它会将其视为一面平坦的墙壁,并会以与正常角度成一定角度反弹。但是,我无法弄清楚如何找到该角度并对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;
            }
        }

我使用毕达哥拉斯定理来找到球与圆圈(环)的内表面碰撞的点。但我知道我目前用来反弹球的代码是错误的,我无法弄清楚正确的方法是什么。

0 个答案:

没有答案