Java 突破游戏:石头的一部分&x27;t更新
我目前正在做一个突破游戏,我几乎完成了。我目前唯一的问题是,当被球击中时,石头的颜色不会改变。 石头的颜色由其类型(1-3)定义,每当击中石头时,其类型减少1。我知道石头的类型在被击中时会成功减少,因为当类型变为0时它就会消失 这是stones类的构造函数: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
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);
}
}
}
}