绘制图像的一部分(Java)



这是我的问题-我试图绘制单个图像的圆形部分。

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

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

但是,这看起来只会画出一个正方形的小节。有人知道比画成吨的小方块来产生圆圈的错觉更容易的方法吗?

感谢

您可以使用Graphics中的setClip()方法来执行此操作。

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

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

正如我所说,它需要更多的工作,这意味着QuadCurve2D对象可能需要以不同的方式定义,但您可以检查文档中的内容。

灯光半径最整洁的效果是在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值中添加一些噪声。甚至可以调整颜色,让光线更温暖。

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

相关内容

最新更新