我有以下代码来绘制的RadialGradientPaint圆:Java画的RadialGradientPaint圆切成矩形
public class Display extends JPanel {
@Override
public void paintComponent(Graphics g){
// SETUP
BufferedImage base = new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = base.createGraphics();
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g2d.setColor(Color.WHITE);
g2d.fillRect(0, 0, getWidth(), getHeight());
// DRAW STUFF
Character.draw(g2d);
// FINISH UP
g.drawImage(base, 0, 0, null);
g2d.dispose();
g.dispose();
}
}
的显示类:
public class Character {
public static void draw(Graphics2D g2d){
g2d.setColor(Color.RED);
g2d.fillRect(0, 0, 1000, 750);
drawVisibilityPolygon(g2d);
}
private static void drawVisibilityPolygon(Graphics2D g2d){
Point center = new Point(1000/2, 750/2);
float radius = 200;
float[] dist = {
0f,
1f
};
Color[] colors = {
new Color(0, 0, 0, 0),
new Color(0, 0, 0, 255)
};
drawGradientCircle(g2d, radius, dist, colors, center);
}
private static void drawGradientCircle(Graphics2D g2d, float radius, float[] dist, Color[] colors, Point2D center){
RadialGradientPaint rgp = new RadialGradientPaint(center, radius, dist, colors);
g2d.setPaint(rgp);
g2d.fill(new Ellipse2D.Double(center.getX() - radius, center.getY() - radius, radius * 2, radius * 2));
}
}
拉伸方法由Display类称为包含在一个JFrame:
public class Window extends JFrame {
private Display display = new Display();
public Window(String title, int width, int height){
super(title);
add(display);
setSize(width, height);
setIgnoreRepaint(false);
setLocationRelativeTo(null);
setResizable(false);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setVisible(true);
}
public Display getDisplay() {
return display;
}
}
这工作正常,但我想用一种颜色来填充圆圈外部分(只有那部分)。
我试过使用AlphaComposite,但我不知道如何使用它来做到这一点。我可以制作一个更大的圆圈并减小dist1值,但绘制需要很长时间(我的机器上大约需要10ms,而不是图像中圆圈的2ms)。我正试图把它变成游戏。
我该怎么办?非常感谢,如果这有一个明显的解决方案,但我不能把它放在手指上。
如果您需要更多信息,请查询。
你的意思是你想要的红色背景显示像[这](https://imgur.com/IJrVCSP)? – c0der
@ c0der确实(我画的红点只是表示游戏中的屏幕中心,它没有发布到这个问题) – Tom