2016-11-19 43 views
0

我正在嘗試製作我自己的跳棋版本,而且我目前已經編寫了存儲繪製棋盤和棋子的代碼。如何在java中分層圖形?

每次我運行代碼時,我都會得到不同的結果,因爲電路板正在繪製某些部分。我如何讓所有片段始終出現在電路板上?我瞭解類似的問題,但他們沒有提供任何有用的幫助。

下面是是代碼繪製板:

public void paint(Graphics gr) { 
    Graphics2D gr2D = (Graphics2D) gr; 
    gr2D.setColor(color1); 
    BasicStroke stroke = new BasicStroke(strokeThickness, 
      BasicStroke.CAP_SQUARE, BasicStroke.JOIN_ROUND); 
    gr2D.setStroke(stroke); 

    for (int i = 0; i < 8; i++) { 
     for (int j = 0; j < 8; j++) { 
      gr.setColor((gr.getColor() == color2) 
        ? color1 : color2); 
      gr.fillRect((int) (start + CHANGEVAL * i), 
        (int) (start + CHANGEVAL * j), 
        (int) CHANGEVAL, 
        (int) CHANGEVAL); 
     } 
     gr.setColor((gr.getColor() == color2) 
       ? color1 : color2); 
    } 
} 

而這裏的,提請有關的多條代碼:

public static void setPieces() { 
    posX = 0; 
    posY = 0; 
    for (int i = 0; i < 3; i++) { 
     for (int j = 0; j < 4; j++) { 
      aryPiecePos[posX][posY] = SQUARE_STATE_RED; 
      board.repaint(board.getCoordX(posX), board.getCoordY(posY), Color.RED); 
      posX += 2; 
     } 
     posX = (posX == 8 ? 1 : 0); 
     posY += 1; 
    } 
    posX = 1; 
    posY = 5; 
    for (int i = 0; i < 3; i++) { 
     for (int j = 0; j < 4; j++) { 
      aryPiecePos[posX][posY] = SQUARE_STATE_BLACK; 
      board.repaint(board.getCoordX(posX), board.getCoordY(posY), Color.BLACK); 
      posX += 2; 
     } 
     posX = (posX == 8 ? 1 : 0); 
     posY += 1; 
    } 
} 

而且這裏是我所有代碼的鏈接: 下面是一個超鏈接我目前有什麼:https://drive.google.com/open?id=0B2uJqRSB8ckHYW53NmZsZDdxWWs

回答

0

你先畫的東西會在更深的層面上說出來。

g.setColor(Color.BLUE); 
g.fillRect(x, y, width, height); 
g.setColor(Color.GREEN); 
g.fillRect(x, y, width, height); 

使用上面的代碼,藍色的矩形將不可見,因爲綠色的矩形被繪製在它上面。

因此,要解決您的問題,您需要首先繪製板,然後再繪製所有部分。