所以我正在做一个由两个网格组成的游戏。每个网格都是一个JPanel,我在网格中的每个空间上(可能)绘制一个对象。我发现了
绘画
对象正在减慢应用程序的速度,我想知道是否有办法防止这种情况发生。
详细信息:
-
每个网格为6x12,因此可能有144个对象(极端情况)加上背景将立即绘制到整个框架上。
-
绘制的每个对象都是一个16x16图像文件,它会根据大小进行缩放,不知道这是否相关,但我已经为对象类提供了构造函数,以防它可能与初始化图像有关?
-
不知道如何解释这一点,但图像从未保存在对象中。函数的作用是:当图像被另一个类调用时,创建并返回该图像。
-
目前,该项目已设置为在游戏开始时初始化对象数组。直到切换到板JPanel并绘制对象,它才会减速。
-
当显示Board JPanel时,对象仅绘制一次
Board类的paintComponent:
//public Board extends JPanel
// boardManager holds an array of the objects
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
for(int i = 0; i < 12; i++) {
for(int j = 0; j < 6; j++) {
if(boardManager.getVisibility(i, j)) {
g.drawImage(
boardManager.getImage(i, j),
boardManager.getX(i, j),
boardManager.getY(i, j),
this
);
}
}
}
}
从BoardManager类获取图像(int,int):
public Image getImage(int x, int y) {
return grid[x][y].getImage();
}
对象类的构造函数:
private int current;
public Object(Game frame, int x, int y, String c, Boolean vis) {
this.frame = frame;
xPos = x;
yPos = y;
color = c;
visible = vis;
current = 01;
imgPath = "/game/img/" + color + "/";
}
对象类中的getImage():
public Image getImage() {
try {
BufferedImage img = ImageIO.read(this.getClass().getResource(imgPath + current + ".png"));
Image scaledImg = img.getScaledInstance(16 * frame.scale, 16 * frame.scale, Image.SCALE_FAST);
return scaledImg;
}
catch(IOException | IllegalArgumentException ex) {
System.err.println("Error: file not found " + imgPath + current + ".png");
}
return null;
}
我主要担心的是,随着棋盘上的人越来越多,游戏的进程将开始放缓,这可能是未来的问题。目前这种滞后并不严重,但我只能测试到目前为止只有一块板被填满时会发生什么。我相信,随着两个董事会都被填满,情况会变得更糟。
我的代码是如何设置的,有什么问题吗?还是有更有效的方法来解决这个问题?