2016-07-03 1 views
0

J'essaye de faire un jeu, et il y a un bouton crédits. Lorsque vous cliquez sur le bouton crédits, un gif apparaît et se déroule comme les crédits à la fin d'un film. Le GIF dure 10,25 secondes. J'essaye de dessiner quelque chose quand le GIF se termine, mais la seule façon de le détecter est de faire Thread.sleep (10250); puis en le dessinant. Cependant, Thread.sleep met le gif en pause, puis le reprend après 10 secondes. Voici le code correspondant:Thread.sleep pendant qu'un GIF joue

public void paint(Graphics g){ 
     Graphics2D g2 = (Graphics2D) g; 
     if(onFrontPage == true){ 
      g2.drawImage(frontpage, 0, 0, this); 
     } 
     if(credits == true){ 
      g2.drawImage(creditsgif, 0, 0, this); 
     } 
     if(aftercredits == true){ 
      g2.drawImage(creditsimg, 0, 0, this); 
     } 
    } 



    // Checks credits button 
    if(e.getX() > 549 && e.getY() > 458 && e.getX() < 749 && e.getY() < 534){ 
     credits = true; 
     onFrontPage = false; 
     repaint(); 
     try { 
      Thread.sleep(10250); 
     } catch (InterruptedException e1) { 
      // TODO Auto-generated catch block 
      e1.printStackTrace(); 
     } 
     credits = false; 
     aftercredits = true; 
     repaint(); 

    } 

Je suis en train de dessiner l'image « creditsimg » après le gif est terminé, mais le sommeil de fil est une pause gif au début pendant 10 secondes et puis le démarrage gif . Comment puis-je faire fonctionner Thread.sleep en arrière-plan afin qu'il n'interfère pas avec le gif?

Répondre

0
if(credits == true){ 
    Thread th=new Thread() { 
    public void run() { 
     g2.drawImage(creditsgif, 0, 0, null); 
    } 
    }; 
    th.start(); 
} 

vous devrez peut-être rendre certaines variables finales ou les passer dans le constructeur du thread.

+0

Impossible d'utiliser le mot clé "this" pour ImageObserver, que dois-je utiliser à la place? Dans les tutoriels, j'ai regardé que c'était toujours "ceci" et ils n'ont jamais expliqué ce qu'est le ImageObserver ... – Joey402