使用 Graphics2D Area 的替代方案?
Alternative to using Graphics2D Area?
我正在制作一款游戏,您可以从绘制地图开始。目前它的工作原理是有一个 Area
实例变量,然后当玩家 clicks/drags 鼠标时,它会向其添加 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
s 的好方法。使用 area.getPathIterator
不够准确。
所以我想知道还有哪些保存图纸的方法?我不能只有一个 Ellipse
数组,因为这样擦除就不起作用了。
谢谢!
如果您一遍又一遍地绘制相同的东西,可能值得将其绘制到图像一次或在启动时从文件加载它,然后只绘制图像而不是绘制所有单独的形状。
要从文件加载,请将图片文件放在与 .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);
如果你有一些东西在背景上移动,而不是添加和减去移动的项目。只需绘制背景,然后绘制移动的东西,绘制背景将以更少的计算量有效地消除旧位置。
我正在制作一款游戏,您可以从绘制地图开始。目前它的工作原理是有一个 Area
实例变量,然后当玩家 clicks/drags 鼠标时,它会向其添加 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
s 的好方法。使用 area.getPathIterator
不够准确。
所以我想知道还有哪些保存图纸的方法?我不能只有一个 Ellipse
数组,因为这样擦除就不起作用了。
谢谢!
如果您一遍又一遍地绘制相同的东西,可能值得将其绘制到图像一次或在启动时从文件加载它,然后只绘制图像而不是绘制所有单独的形状。
要从文件加载,请将图片文件放在与 .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);
如果你有一些东西在背景上移动,而不是添加和减去移动的项目。只需绘制背景,然后绘制移动的东西,绘制背景将以更少的计算量有效地消除旧位置。