【问题标题】:Looking to code a gradient filled Tile in Java想用 Java 编写一个渐变填充的 Tile
【发布时间】:2014-12-04 15:43:36
【问题描述】:

我正在为我正在编写的游戏设计一张地图,其中有一条河流穿过它。我们有生成上述地图的代码,但图形部分让我有些不快。

我需要的是,当生成“洪泛平原”瓷砖的其中一个方块时,我可以使用某种填充使其一侧(或角落)和洪泛平原成为水 在另一。瓦片已经有了自己的特点,我只是在寻找视觉效果。

我用于填充瓷砖的当前代码:

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);
        }
    }
}

青色只是我最终用来填充渐变的任何代码的占位符。

感谢您的帮助。

【问题讨论】:

  • map 只是一个二维数组吗?你能提供一张你想要达到的效果的图片吗?到目前为止什么有效?

标签: java gradient


【解决方案1】:

绘制泛滥平原而不是单色矩形

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);   

【讨论】:

  • 这完美!非常感谢您的帮助!
【解决方案2】:

这将垂直绘制您的单元格渐变。

   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);
        }

    }

【讨论】:

    【解决方案3】:

    我以前写了一个ColorGradient 课程...可能对你有帮助吗?此外,您可能想查看java.awt.Paint 及其子类,特别是用于绘制精灵的 TexturePaint

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-04
      • 2021-12-05
      • 1970-01-01
      • 2011-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-23
      相关资源
      最近更新 更多