我目前正在开发一款BreakOut游戏,我已经快完成了。我目前唯一的问题是,当被球击中时,石头的颜色不会改变。一块石头的颜色是由它的类型( 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 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);
}有谁知道为什么石头的颜色不会改变,尽管它的类型被成功地减少了?提前感谢!
发布于 2019-02-18 03:04:26
你永远不会改变宝石的颜色。它是在构造函数中设置的,但没有在其他地方更改(不是在您所显示的代码中)。
我甚至不会让石头拥有颜色值,而是让绘制代码决定给它着色,可能是这样的:
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);
}
}
}
}https://stackoverflow.com/questions/54736525
复制相似问题