gpt4 book ai didi

java - 使用 Graphics2D Area 的替代方案?

转载 作者:行者123 更新时间:2023-11-30 03:12:35 25 4
gpt4 key购买 nike

我正在制作一款游戏,你首先要绘制 map 。目前,它的工作原理是拥有一个 Area 实例变量,然后当玩家单击/拖动鼠标时,它会向其中添加 Ellipse2Ds。这就是我的意思:

Area land = new Area();

然后在MouseDragged方法中

Point2D mouse = e.getPoint();
Ellipse2D ter = new Ellipse2D.Double(mouse.getX() - drawRad, mouse.getY() - drawRad, drawRad*2, drawRad*2);

land.add(new Area(ter));

然后基本相同,除了用于删除的land.subtract(new Area(ter))

我的问题是,在进行大量绘制之后,绘制区域变得非常慢。另一个问题是我希望能够轻松获得绘图的轮廓,但我还没有找到使用 Area 来实现这一点的好方法。使用 area.getPathIterator 还不够准确。

所以我想知道保存绘图的其他方法是什么?我不能只有一个椭圆数组,因为这样删除就不起作用。

谢谢!

最佳答案

如果您一遍又一遍地绘制相同的东西,可能值得将其绘制到图像一次或在启动时从文件加载它,然后只绘制图像而不是绘制所有单独的形状。

要从文件加载,请将图片文件放在与 .java 文件相同的目录中并加载:

 BufferedImage img  = ImageIO.read(this.getClass().getResource("picture.png"));

在图像上绘制一次:

BufferedImage img  = new BufferedImage(width,height, BufferedImage.TYPE_4BYTE_ABGR);
Graphics2D g = img.createGraphics();

在您的paintComponent方法中,您在某处绘制图像。

g.drawImage(img, 0, 0, this);

如果你有一些东西在背景上移动,而不是添加和减去移动的项目。只需绘制背景,然后绘制移动的物体,绘制背景将有效地删除旧位置,并且计算量较少。

关于java - 使用 Graphics2D Area 的替代方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33311711/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com