我試圖爲每件新作品(由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