游戏:球回弹逻辑

时间:2014-04-08 08:33:09

标签: android logic draw physics android-custom-view

在乒乓球比赛中,我已经弄明白让球在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;
}

1 个答案:

答案 0 :(得分:0)

最后我解决了自己的问题:

只需制作此mods:

主要方法:

protected void handleTopFastBounce() {
        if(mBall.goingUp() == false) return;

        if(mBall.y <= Ball.RADIUS) {
            mBall.bounceTop();
            mBall.y++;
        }
}

Ball logic:创建一个修改bounceWall()方法的新方法:

public void bounceTop() {
            setAngle(4 * Math.PI - mAngle);
}