Java 突破游戏:石头的一部分&x27;t更新

Java 突破游戏:石头的一部分&x27;t更新,java,Java,我目前正在做一个突破游戏,我几乎完成了。我目前唯一的问题是,当被球击中时,石头的颜色不会改变。 石头的颜色由其类型(1-3)定义,每当击中石头时,其类型减少1。我知道石头的类型在被击中时会成功减少,因为当类型变为0时它就会消失 这是stones类的构造函数: public Stone(int type, Position pos) { this.pos = pos; this.type = type; switch(this.type) { cas

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

这是stones类的构造函数:

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 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) {

                // ********
                int type = stones[i][j].getType();
                Color color = .... set color based on type value here

                // *******

                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 drawStones(图形2D g2){
stones=view.getGame().getLevel().getStones();
for(int i=0;i=1){
// ********
int type=stones[i][j].getType();
颜色颜色=…根据此处的类型值设置颜色
// *******
g2.setColor(stones[i][j].getColor());
g2.fillRoundRect(x_位置,y_位置,
(int)((双)常数。屏幕宽度/常数。正方形)-2,
(int)((双)常数。屏幕高度/常数。平方-2,1,1);
}
}
}
}

把整个代码放进去,这样我们就可以自己编译并测试。@SamzSakerz:“整个代码”可能相当大,包含很多类。最好是要求原始海报创建并发布一个小型代表性的新程序,一个编译、运行并向我们展示问题的程序。通过这种方式,他们致力于将问题隔离在最小的状态(这一练习通常会使他们认识到问题的原因并创建解决方案),我们不必费力地处理大量不相关的代码。@hovercraftfullofels这就是我的意思:P一个我们可以编译并测试错误的工作代码。@SamzSakerz:那么最好从一开始就说明你的意思。如果标题和最后一句话中的问题是相关的,那么有一件事可以说:当你调用setType时,构造函数不会被调用,而只调用setType方法。因此,当您调用setType时,构造函数是不涉及的。@kai:true,但是像OP那样使用“并行字段”是愚蠢的doing@kai这就是为什么OP应该发布一个有效的
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) {

                // ********
                int type = stones[i][j].getType();
                Color color = .... set color based on type value here

                // *******

                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);
            }
        }
    }
}