我试图为每件新作品(由4个瓷砖组成)设置一个新的随机颜色。为了绘制完整的一块板子,我在董事会类涂料成分:Java俄罗斯方块 - 为每件设置新颜色
public void paintComponent(Graphics g) {
g.setColor(Color.black);
g.fillRect(0, 0, getWidth(), getHeight());
for(int row = 0; row < grid.length; row++) {
for(int col = 0; col < grid[row].length; col++) {
if(grid[row][col] != null) {
//if there is a non-null space, that is a Tetris piece.. fill it red
g.setColor(color);
g.fillRect(row * tilesize, col * tilesize, tilesize, tilesize);
g.setColor(Color.WHITE);
g.drawString("(" + row + ", " + col + ")", row * tilesize, col * tilesize+10);
}
}
}
}
你可以看到,g.setColor()
被赋予作为董事会构造函数中定义一个全局变量color
:
color = setColor();
的setColor():
public Color setColor() {
Random rand = new Random();
float r = rand.nextFloat();
float g = rand.nextFloat();
float b = rand.nextFloat();
Color randomColor = new Color(r, g, b);
return randomColor;
}
当有碰撞,产生新的一块,它会覆盖一个新的随机颜色的color
全局变量...
public void collisionCheck() {
if (newPiece.isCollision()){
newPiece = new Piece(this, randomPiece());
color = setColor();
}
}
这给了我这样的结果:
所有形状被设置为相同的颜色...不是我想要的
然后,如果生成一个新的作品,它们的颜色将改变...再次,而不是我想要的。
我知道什么的问题是......那就是我不应该覆盖全球色彩变量...但如果我不分配由董事会类颜色...而是您可以通过瓷砖类的颜色,因为这样的:
g.setColor(grid[row][col].getColor());
public void paintComponent(Graphics g) {
g.setColor(Color.black);
g.fillRect(0, 0, getWidth(), getHeight());
for(int row = 0; row < grid.length; row++) {
for(int col = 0; col < grid[row].length; col++) {
if(grid[row][col] != null) {
//if there is a non-null space, that is a Tetris piece.. fill it red
g.setColor(grid[row][col].getColor());
g.fillRect(row * tilesize, col * tilesize, tilesize, tilesize);
g.setColor(Color.WHITE);
g.drawString("(" + row + ", " + col + ")", row * tilesize, col * tilesize+10);
}
}
}
}
然后每个拼贴都会有各自的瓦片被重新粉刷一次产生了新的色彩......
我的目标是给一块(由4个瓷砖组成)随机颜色...然后当一个新的作品生成时,第一个作品保留其颜色......并且新作品保留其颜色...
有什么想法?
谢谢!
游戏开发,你应该有一个游戏循环,而不是在运行的paintComponent一切() – Jimmt 2013-04-30 16:28:33
@Jimmt我是新来这。你能给个例子吗? – Growler 2013-04-30 16:31:30
http://www.gameprogblog.com/generic-game-loop/#headingWhatIsGameLoop - 基本上,游戏循环应该规定游戏的运行速度,以便在更快的机器上运行速度不会更快,或者在速度较慢的机器上速度较慢,并且fps不会太高,以最大限度地提高性能并且不会最大限度地减少cpu的使用。 – Jimmt 2013-04-30 17:10:47