为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

幕布斯6054654 2022-06-23 17:31:14
我目前正在开发一个 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);}有谁知道为什么石头的颜色在击中时不会改变,尽管它的类型被成功地减少了?提前致谢!
查看完整描述

1 回答

?
智慧大石

TA贡献1946条经验 获得超3个赞

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


我什至不会让石头保持颜色值,而是让绘图代码决定给它上色,也许是这样的:


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

            }

        }

    }

}


查看完整回答
反对 回复 2022-06-23
  • 1 回答
  • 0 关注
  • 91 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号