我正在尝试开发一个简单的2D游戏,并且为了动画,我正在使用Timer和TimerTask。
但是只有当我为24000 X 1600大小和30MB png文件的背景图像调用重绘时,它才会变得如此缓慢。当我打电话给其他重拍时,它很好。
是因为我画得太大了吗?
我试过24000 X 1600,130KB的png文件,但它仍然画得那么慢..有什么问题?
啊,而且,我正试图在Container内的JPanel上绘制它。
这是我的代码
public void setIcon() {
try {
imgBackground = ImageIO.read(new File("./Images/Background/Background_1.png"));
imgBackground = convertToARGB(imgBackground);
} catch (Exception e) {
System.out.println(e.toString());
}
}
public static BufferedImage convertToARGB(BufferedImage image) {
BufferedImage newImage = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_INT_ARGB);
Graphics2D g = newImage.createGraphics();
g.drawImage(image, 0, 0, null);
g.dispose();
return newImage;
}
public void drawBackground() {
if (backgroundX >= -25900) {
buffg.drawImage(imgBackground, backgroundX, 0, null);
if (gameState) {
if (keyRight) {
backgroundX -= 3;
} else {
backgroundX -= 2;
}
}
}
if (background2X >= -25900) {
buffg.drawImage(imgBackground, background2X, 0, null);
if (gameState) {
if (keyRight) {
background2X -= 3;
} else {
background2X -= 2;
}
}
}
if ((backgroundX <= -22000) && (background2X <= -25900))
background2X = fWidth;
if ((background2X <= -22000) && (backgroundX <= -25900))
backgroundX = fWidth;
}
public void start(){
Timer timer = new Timer();
timer.schedule(timerTask, 50, 10);
}
TimerTask timerTask = new TimerTask() {
@Override
public void run() {
playerMoveProcess();
getContentPane().repaint();
getContentPane().revalidate();
}
};
答案 0 :(得分:0)
你的形象是huuuge。假设绘制一个像素需要1纳秒。然后绘制整个图像需要38.4毫秒。
您应该确保不是绘制整个图像,而是将绘图限制为实际更改的那些部分。
当我第一次看到24000时,我认为这是一个错字。一定是拼写错误。没有人会生成如此大的图像,并期望它们得到有效处理。