J'essaie de développer un jeu 2D simple et pour l'animation, j'utilise Timer et TimerTask.Pourquoi dessine-t-il si lentement?
Mais il dessine si lent que lorsque j'appelle repeindre pour l'image de fond qui est de taille 24000 X 1600 et 30 Mo de fichier png. Et c'était bien quand j'ai appelé d'autres repaints.
Est-ce parce que je dessine une trop grande image?
J'ai essayé avec 24000 X 1600, 130KB png fichier mais il a toujours dessiné si lent .. Quel est le problème ??
Ah, et aussi, j'essaie de le dessiner sur le JPanel qui est dans Container.
Voici mon code
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();
}
};
Veuillez lire https://stackoverflow.com/help/mcve. –