有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

绘制图像一部分的图形(Java)

这是我的问题——我试图画一幅图像的圆形部分

我正在做一个自上而下的地牢爬行类游戏,我试图在玩家周围做一个小半径。地板是一个单一的图像,我只需要画一个小的圆形部分。我一直在研究这个方法:

drawImage(Image img,
          int dx1, 
          int dy1,
          int dx2,
          int dy2,
          int sx1,
          int sy1,
          int sx2,
          int sy2,
          Color bgcolor, 
          ImageObserver observer) 

但是,这看起来只会画出一个正方形的分段。 有没有人知道一种比画成吨的小正方形更简单的方法来产生圆的错觉

谢谢


共 (3) 个答案

  1. # 1 楼答案

    这不是一个很好的解决方案,但是如果你画了整个地板,然后画了一个中间有一个透明洞的黑色图像呢

  2. # 2 楼答案

    光线半径最整洁的效果是在其alpha通道中使用渐变覆盖

    比如:

    // do this once during setup
    overlay = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGBA);
    for (int x = 0; x < width; ++x)
    {
        for (int y = 0; y < height; ++y)
        {
            double range = 100;
            double distance = Math.sqrt(Math.pow(x - width / 2, 2) + Math.pow(y - height / 2, 2));
            int value = Math.max(100, (int)Math.round(255 - 100 * distance / range));
            overlay.setRGB(x, y, new Color(0, 0, 0, value));
        }
    }
    ....
    // do this every frame
    gfx.drawImage(overlay, 0, 0, null);
    

    我没有编译这个,所以它可能充满了错误

    如果你想要一些“闪烁”,你可以生成几个贴图,并给alpha值添加一些噪声。甚至可以调整颜色,让光线更温暖

  3. # 3 楼答案

    您可以使用^{}中的setClip()方法来实现这一点

    它还需要一些其他工作,但是:

    import java.awt.Graphics;
    import java.awt.geom.QuadCurve2D;
    //...
    
      g.setClip(new QuadCurve()); // Set the bounding curve for the image.
      g.drawImage(...);
    

    正如我所说,它需要更多的工作,这意味着QuadCurve2D对象可能需要以不同的方式定义,但您可以check the doc来实现这一点