2014-12-04 125 views
0

我正在設計一個地圖,有一條河流穿過它爲我編碼的遊戲。我們有代碼來生成所述地圖,但圖形部分導致我一些悲傷。尋找編寫一個漸變填充在Java中的瓷磚

我需要的是,當生成「Flood Plains」瓦片的其中一個正方形時,我可以使用某種填充使其在邊緣(或角)和洪泛區 上有水。瓷磚已經有了它自己的特點,我只是在尋找一種視覺效果。

當前的代碼我有填充磚:

g.setColor(Color.white); 

for (int i = 0; i < map.length; i += 1){ 
    for (int e = 0; e < map[0].length; e += 1){ 
     //THE COLOR WORKS 
     g.setColor(Color.white); 
     if (map[e][i] == 4){ 
      g.setColor(Color.blue); 
      g.fillRect(i*10, e*10, 10, 10); 
     } else if (map[e][i] == 0){ 
      g.setColor(Dirt); 
      g.fillRect(i*10, e*10, 10, 10); 
     } else { 
      g.setColor(Color.cyan); 
      g.fillRect(i*10, e*10, 10, 10); 
     } 
    } 
} 

青色僅僅是什麼代碼,我最終使用,填補了梯度的佔位符。

感謝您的任何幫助。

+0

映射只是一個2維數組?你能提供一個你試圖達到的效果的圖片嗎?到目前爲止有效嗎? – Roger 2014-12-04 15:51:00

回答

0

要繪製的沖積平原,而不是一個彩色矩形的

g.setColor(Color.cyan); 
g.fillRect(i*10, e*10, 10, 10); 

我會用兩個三角形

g.setColor(Color.cyan);        
int[] plainX = { i * 10, i * 10 + 10, i * 10 };  
int[] plainY = { e * 10, e * 10 + 10, e * 10 + 10 }; 
g.fillPolygon(plainX, plainY, plainX.length);  
g.setColor(Color.blue);        
int[] waterX = { i * 10, i * 10 + 10, i * 10 + 10 }; 
int[] waterY = { e * 10, e * 10 + 10, e * 10 };  
g.fillPolygon(waterX, waterY, waterX.length); 
+0

這完美的作品!十分感謝你的幫助! – Raulwicke 2014-12-04 20:33:06

0

這會在垂直方向上繪製您的單元格漸變。

void fillGradient(Graphics graphics, int fromColor,int endColor, int x,int y,int w,int h){ 


     int rdif = ((fromColor<<16)&0xff - (endColor<<16) & 0xff)/h; 
     int gdif = ((fromColor<<8)&0xff - (endColor<<8) & 0xff)/h; 
     int bdif = ((fromColor)&0xff - (endColor) & 0xff)/h; 

     int rfrom = (fromColor<<16) & 0xff; 
     int gfrom = (fromColor<<8) & 0xff; 
     int bfrom = (fromColor) & 0xff; 

     for (int i = 0; i < h; i++) { 
      int r = rfrom + rdif * i; 
      int g = gfrom + gdif * i; 
      int b = bfrom + bdif * i; 
      int color = (r << 16) | (g << 8) | b; 
      graphics.setColor(new Color(color)); 
      graphics.drawLine(x, y + i , x + w, y + i); 
     } 

    }