Я создаю игру и хотел бы реализовать рендеринг закругленных изображений, однако каждое решение, которое я пробовал, либо рисует некрасивые и неровные углы, либо значительно замедляет игровой цикл. Я хотел бы найти решение, которое одновременно рисовало бы плавные углы и не оказывало бы существенного влияния на производительность моей игры. У меня есть цикл рендеринга, который запускает каждый кадр, где средство рендеринга проходит через каждый из моих объектов и вызывает соответствующий метод рендеринга:
public void render(Graphics2D g) {
int radius = 30;
int w = (int) size.X;
int h = (int) size.Y;
int x = (int) pos.X;
int y = (int) pos.Y;
//This way looks good, but creates a lot of lag:
Shape clipShape = new RoundRectangle2D.Double(x, y, w, h, 20, 20);
g.setComposite(AlphaComposite.Clear);
g.fillRect(x, y, w, h);
g.setComposite(AlphaComposite.SrcOver);
g.setPaint(new TexturePaint(image, new Rectangle2D.Float(x, y, w, h)));
g.fill(clipShape);
//This way doesn't have an impact on performance, but looks ugly;
Shape rounded = new RoundRectangle2D.Double(x, y, w, h, radius, radius);
g.setClip(rounded);
g.drawImage(image, x, y, w, h, null);
g.setClip(null);
}
Я создаю игру и хотел бы реализовать рендеринг закругленных изображений, однако каждое решение, которое я пробовал, либо рисует некрасивые и неровные углы, либо значительно замедляет игровой цикл. Я хотел бы найти решение, которое одновременно рисовало бы плавные углы и не оказывало бы существенного влияния на производительность моей игры. У меня есть цикл рендеринга, который запускает каждый кадр, где средство рендеринга проходит через каждый из моих объектов и вызывает соответствующий метод рендеринга: [code] @Override public void paintComponent(Graphics g) { Graphics2D g2 = (Graphics2D) g; for (UIImage child : children) { child.render(g2); } } [/code] Вот как выглядит метод рендеринга UIImage: [code]public void render(Graphics2D g) { int radius = 30;
int w = (int) size.X; int h = (int) size.Y;
int x = (int) pos.X; int y = (int) pos.Y;
//This way looks good, but creates a lot of lag: Shape clipShape = new RoundRectangle2D.Double(x, y, w, h, 20, 20); g.setComposite(AlphaComposite.Clear); g.fillRect(x, y, w, h); g.setComposite(AlphaComposite.SrcOver);
g.setPaint(new TexturePaint(image, new Rectangle2D.Float(x, y, w, h)));
g.fill(clipShape);
//This way doesn't have an impact on performance, but looks ugly; Shape rounded = new RoundRectangle2D.Double(x, y, w, h, radius, radius); g.setClip(rounded);
g.drawImage(image, x, y, w, h, null);
g.setClip(null); } [/code] Любая помощь приветствуется!