【问题标题】:Game: ball rebound logic游戏:球反弹逻辑
【发布时间】:2014-04-08 08:33:09
【问题描述】:

从乒乓球比赛中,我得到了让球在 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 轴的顶部,这是。我正在为乒乓球比赛制作一个模组,它只包含一个桨(在底部),球必须在其他 3 面墙上反弹。

如前所述,我让它在 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;
}

【问题讨论】:

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


    【解决方案1】:

    最后我自己解决了:

    只需要制作这个模组:

    主要方法:

    protected void handleTopFastBounce() {
            if(mBall.goingUp() == false) return;
    
            if(mBall.y <= Ball.RADIUS) {
                mBall.bounceTop();
                mBall.y++;
            }
    }
    

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

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

    【讨论】:

    • 只需反转速度轴(当 x 宽度时反转 x 速度,当 y高度时反转 y 速度)
    猜你喜欢
    • 2012-02-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-22
    • 2014-09-07
    • 1970-01-01
    • 1970-01-01
    • 2011-12-15
    • 1970-01-01
    相关资源
    最近更新 更多