Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么球的大小不会增加?(游戏)_Java - Fatal编程技术网

Java 为什么球的大小不会增加?(游戏)

Java 为什么球的大小不会增加?(游戏),java,Java,我想在乒乓球游戏框架中增加一个功能。我希望每次球碰到球拍时,球的大小都能增加 这是我的尝试。我认为第一段代码就是问题所在。第二个街区是全班 public class PlayState extends State { private Paddle paddleRight, paddleLeft; private static final int PADDLE_WIDTH = 30; private static final int PADDLE_HEIGHT = 60; private Bal

我想在乒乓球游戏框架中增加一个功能。我希望每次球碰到球拍时,球的大小都能增加

这是我的尝试。我认为第一段代码就是问题所在。第二个街区是全班

public class PlayState extends State {
private Paddle paddleRight, paddleLeft;
private static final int PADDLE_WIDTH = 30;
private static final int PADDLE_HEIGHT = 60;

private Ball ball;

//bDiam stands for ball diameter

private static int bDiam = 10;

private int playerScore = 0;
private Font scoreFont;

@Override
public void init() {
    paddleLeft = new Paddle(0, 195, PADDLE_WIDTH, PADDLE_HEIGHT);
    paddleRight = new Paddle(785, 195, PADDLE_WIDTH, PADDLE_HEIGHT);
    scoreFont = new Font("SansSerif", Font.BOLD, 25);
    ball = new Ball(300, 200, bDiam, bDiam);
}

@Override
public void onClick(MouseEvent e) {
//  playerScore = 5;


}

@Override
public void update() {
    paddleLeft.update();
    paddleRight.update();
    ball.update();

    if (ballCollides(paddleLeft)) {
        playerScore++;

        bDiam+=  20;
        ball.onCollideWith(paddleLeft);
        Resources.hit.play();
    } else 
        if (ballCollides(paddleRight)) {
        playerScore++;
        bDiam= bDiam + 20;
        ball.onCollideWith(paddleRight);
        Resources.hit.play();
    } else if (ball.isDead()) {
        playerScore -= 3;

        ball.reset();

    }
}
全班

public class PlayState extends State {
private Paddle paddleRight, paddleLeft;
private static final int PADDLE_WIDTH = 30;
private static final int PADDLE_HEIGHT = 60;

    private Ball ball;

    //bDiam stands for ball diameter

    private static int bDiam = 10;

    private int playerScore = 0;
    private Font scoreFont;

    @Override
    public void init() {
        paddleLeft = new Paddle(0, 195, PADDLE_WIDTH, PADDLE_HEIGHT);
        paddleRight = new Paddle(785, 195, PADDLE_WIDTH, PADDLE_HEIGHT);
        scoreFont = new Font("SansSerif", Font.BOLD, 25);
        ball = new Ball(300, 200, bDiam, bDiam);
    }

    @Override
    public void onClick(MouseEvent e) {
    //  playerScore = 5;


    }

    @Override
    public void update() {
        paddleLeft.update();
        paddleRight.update();
        ball.update();

        if (ballCollides(paddleLeft)) {
            playerScore++;

            bDiam+=  20;
            ball.onCollideWith(paddleLeft);
            Resources.hit.play();
        } else 
            if (ballCollides(paddleRight)) {
            playerScore++;
            bDiam= bDiam + 20;
            ball.onCollideWith(paddleRight);
            Resources.hit.play();
        } else if (ball.isDead()) {
            playerScore -= 3;

            ball.reset();

        }
    }

    @Override
    public void render(Graphics g) {
        // Draw Background
        g.setColor(Resources.darkBlue);
        g.fillRect(0, 0, GameMain.GAME_WIDTH, GameMain.GAME_HEIGHT);
        g.setColor(Resources.darkRed);
        g.fillRect(GameMain.GAME_WIDTH / 2, 0, GameMain.GAME_WIDTH / 2,
                GameMain.GAME_HEIGHT);
        // Draw Separator Line
        g.drawImage(Resources.line, (GameMain.GAME_WIDTH / 2) - 2, 0, null);

        // Draw Paddles
        g.setColor(Color.white);
     g.fillRect(paddleLeft.getX(), paddleLeft.getY(), paddleLeft.getWidth(),
            paddleLeft.getHeight());
        g.fillRect(paddleRight.getX(), paddleRight.getY(),
                paddleRight.getWidth(), paddleRight.getHeight());

        // Draw Ball
        g.drawRect(ball.getX(), ball.getY(), ball.getWidth(), ball.getHeight());

        // Draw UI
        g.setFont(scoreFont); // Sets scoreFont as current font
        g.drawString("" + playerScore, 350, 40); // Draws String using current
                                                    // font
    }



    @Override
    public void onKeyPress(KeyEvent e) {
        if (e.getKeyCode() == KeyEvent.VK_UP) {
            paddleLeft.accelUp();
            paddleRight.accelUp();
        } else if (e.getKeyCode() == KeyEvent.VK_DOWN) {
            paddleLeft.accelDown();
            paddleRight.accelDown();
        }
    }

    @Override
    public void onKeyRelease(KeyEvent e) {
        if (e.getKeyCode() == KeyEvent.VK_UP
                || e.getKeyCode() == KeyEvent.VK_DOWN) {
            paddleLeft.stop();
            paddleRight.stop();
        }
    }

    private boolean ballCollides(Paddle p) {
        return ball.getRect().intersects(p.getRect());
    }
}

直径变量正在按值传递到Ball构造函数中。这意味着在主程序中更改其值不会更改球的值

你需要像这样的东西

ball.setDiameter(ball.getDiameter() +20)