J'essayais de créer une animation 2D en Java d'une ligne mobile sur le panneau (une ligne se déplaçant d'un point à un autre dans le panneau). J'espère que c'est possible. Voici le code que j'ai utilisé.Panneau non représenté pour l'animation 2D
private void movingline(int length) throws InterruptedException {
for(int i = 0; i + length < width; i++){
for(int j = 0; j + length < height; j++){
eraseline();
drawLine(Color.cyan, i, j, i+length, j+length);
erase = true;
}
}
}
private void eraseline() {
if(erase){
fillCanvas(Color.BLUE);
}
}
Lors de l'exécution du code, le panneau n'apparaît pas.
Voici le code pour dessiner la ligne.
public void drawLine(Color c, int x1, int y1, int x2, int y2) {
int pix = c.getRGB();
int dx = x2 - x1;
int dy = y2 - y1;
canvas.setRGB(x1, y1, pix);
if (dx != 0) {
float m = (float) dy/(float) dx;
float b = y1 - m*x1;
dx = (x2 > x1) ? 1 : -1;
while (x1 != x2) {
x1 += dx;
y1 = Math.round(m*x1 + b);
canvas.setRGB(x1, y1, pix);
}
}
repaint();
}
Lors de l'exécution du code, le panneau ne s'affiche pas avec la ligne en mouvement. Toute aide serait très appréciée.
Je n'ai pas tout à fait vous. La fonction movingline() est appelée depuis le constructeur de la classe. – razor35
Il y a le problème: Le constructeur de votre classe est probablement appelé par 'main()', et c'est le thread principal. Le dessin doit se produire dans le thread Dispatch d'événement, qui est démarré en interne par Java lorsque vous avez des composants Swing (ou AWT). Pour fonctionner correctement, votre dessin doit être fait dans la méthode 'paint()' du panneau. Vous ne pouvez pas (ou au moins ne devriez pas) appeler 'paint()' directement, cependant. Tout ce que vous pouvez faire de l'extérieur est de définir des variables pour contrôler comment cela fonctionne. –
Mis à jour ma réponse avec un exemple de code et quelques explications. –