BreakOut 游戏:部分石头构造函数未更新

我目前正在开发一个 BreakOut 游戏,我几乎完成了。我目前唯一的问题是,当被球击中时,石头的颜色不会改变。石头的颜色由它的类型(1-3)定义,每当石头被击中时,它的类型就会减少1。我知道石头的类型在被击中时会成功减少,因为当类型变为0时它会消失。


这是石头类的构造函数:


public Stone(int type, Position pos) {

      this.pos = pos;

      this.type = type;

      switch(this.type) {

      case 1:

        value = 5;

        color = Color.LIGHT_GRAY;

        break;

      case 2:

        value = 10;

        color = Color.orange;

        break;

      case 3:

        value = 15;

        color = Color.green;

        break;

      }     

}

这是绘制石头的方法:


private void drawStones(Graphics2D g2) {

    stones = view.getGame().getLevel().getStones();


    for (int i = 0; i < stones.length; i++) {

        for (int j = 0; j < stones[1].length; j++) {

            int x_position = (int) stones[i][j].getPosition().getX();

            int y_position = (int) stones[i][j].getPosition().getY();

            if(stones[i][j].getType() >= 1) {

                g2.setColor(stones[i][j].getColor());

                g2.fillRoundRect(x_position, y_position, 

                        (int) ((double)Constants.SCREEN_WIDTH/Constants.SQUARES_X)-2, 

                        (int) ((double)Constants.SCREEN_HEIGHT/Constants.SQUARES_Y)-2 ,1,1);

            }

        }

    }

}

这就是在命中时更新石头类型的方法:


private void updateStonesAndScore() {

    int posLine = ball.getHitStonePosition().getLine();

    int posColumn = ball.getHitStonePosition().getColumn();

    score = score + stones[posLine][posColumn].getValue();

    System.out.println(stones[posLine][posColumn].getType());

    stones[posLine][posColumn].setColor(stones[posLine][posColumn].getColor());

    stones[posLine][posColumn].setType(stones[posLine][posColumn].getType()-1);

}

有谁知道为什么石头的颜色在击中时不会改变,尽管它的类型被成功地减少了?提前致谢!


幕布斯6054654
浏览 92回答 1
1回答

智慧大石

你永远不会改变石头的颜色。它是在构造函数中设置的,但在其他地方没有更改(不是在您显示的代码中)。我什至不会让石头保持颜色值,而是让绘图代码决定给它上色,也许是这样的:private void drawStones(Graphics2D g2) {&nbsp; &nbsp; stones = view.getGame().getLevel().getStones();&nbsp; &nbsp; for (int i = 0; i < stones.length; i++) {&nbsp; &nbsp; &nbsp; &nbsp; for (int j = 0; j < stones[1].length; j++) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; int x_position = (int) stones[i][j].getPosition().getX();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; int y_position = (int) stones[i][j].getPosition().getY();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(stones[i][j].getType() >= 1) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // ********&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; int type = stones[i][j].getType();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Color color = .... set color based on type value here&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // *******&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; g2.setColor(stones[i][j].getColor());&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; g2.fillRoundRect(x_position, y_position,&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (int) ((double)Constants.SCREEN_WIDTH/Constants.SQUARES_X)-2,&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (int) ((double)Constants.SCREEN_HEIGHT/Constants.SQUARES_Y)-2 ,1,1);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java