这是我的问题-我试图绘制单个图像的圆形部分。
我正在做一些自上而下的地牢爬行游戏,我试图在玩家周围形成一个小半径。地板是一个单一的图像,我只需要画它的一个小的圆形部分。我一直在研究这种方法:
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值中添加一些噪声。甚至可以调整颜色,让光线更温暖。
这不是一个很好的解决方案,但如果你画了整个地板,然后画了一个中心有透明洞的黑色图像呢?