Java 为什么画得这么慢?
我正在尝试开发一个简单的2D游戏,对于动画,我使用定时器和定时器任务 但只有当我为24000 X 1600大小和30MB png文件的背景图像调用repaint时,它才绘制得如此缓慢。当我叫其他的重新油漆时,一切都很好 是因为我画得太大了吗 我尝试了24000 X 1600,130KB的png文件,但它仍然绘制得很慢。。有什么问题吗 啊,还有,我试着在容器内的JPanel上画它 这是我的密码Java 为什么画得这么慢?,java,performance,animation,draw,Java,Performance,Animation,Draw,我正在尝试开发一个简单的2D游戏,对于动画,我使用定时器和定时器任务 但只有当我为24000 X 1600大小和30MB png文件的背景图像调用repaint时,它才绘制得如此缓慢。当我叫其他的重新油漆时,一切都很好 是因为我画得太大了吗 我尝试了24000 X 1600,130KB的png文件,但它仍然绘制得很慢。。有什么问题吗 啊,还有,我试着在容器内的JPanel上画它 这是我的密码 public void setIcon() { try { imgBackgro
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();
}
};
public void setIcon(){
试一试{
imgBackground=ImageIO.read(新文件(“./Images/Background/Background_1.png”);
imgBackground=转换为RGB(imgBackground);
}捕获(例外e){
System.out.println(例如toString());
}
}
公共静态BuffereImage转换器为RGB(BuffereImage图像){
BuffereImage newImage=新的BuffereImage(image.getWidth(),image.getHeight(),buffereImage.TYPE_INT_ARGB);
Graphics2D g=newImage.createGraphics();
g、 drawImage(image,0,0,null);
g、 处置();
返回新图像;
}
公共无效退税地(){
如果(背景X>=-25900){
buff.drawImage(imgBackground,backgroundX,0,null);
如果(游戏状态){
如果(右键){
背景x-=3;
}否则{
背景x-=2;
}
}
}
如果(背景2x>=-25900){
buff.drawImage(imgBackground,background2X,0,null);
如果(游戏状态){
如果(右键){
背景2x-=3;
}否则{
背景2x-=2;
}
}
}
如果((backgroundX您的图像是huuuge。假设绘制一个像素需要1纳秒。那么绘制整个图像需要38.4毫秒
您应该确实确保不会绘制整个图像,而是将图形限制为实际更改的部分
当我第一次看到24000时,我认为这是一个输入错误。这一定是一个输入错误。没有人会生成这么大的图像,并期望它们得到有效的处理。哈哈哈……这不是输入错误。我实际上一直在尝试使用24000 X 1600大小。但我认为我的编码有问题,因为我尝试使用2400X1400,但绘制速度也非常慢。请阅读