首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BreakOut游戏:石头构造函数的一部分没有更新

BreakOut游戏:石头构造函数的一部分没有更新
EN

Stack Overflow用户
提问于 2019-02-18 02:50:42
回答 1查看 30关注 0票数 1

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

这是stones类的构造函数:

代码语言:javascript
复制
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;
      }     
}

这是绘制石头的方法:

代码语言:javascript
复制
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);
            }
        }
    }
}

这是一个方法,它在点击时更新石头类型:

代码语言:javascript
复制
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);
}

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-18 03:04:26

你永远不会改变宝石的颜色。它是在构造函数中设置的,但没有在其他地方更改(不是在您所显示的代码中)。

我甚至不会让石头拥有颜色值,而是让绘制代码决定给它着色,可能是这样的:

代码语言:javascript
复制
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);
            }
        }
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54736525

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档