2010-09-24 3 views
2

J'essaye de peindre un écran d'accueil pour mon jeu, mais seulement quand le jeu se charge. Je ne veux pas qu'il soit repeint à chaque fois pendant le match.Java - Paint, JFrame et Backgrounds

donc je l'ai fait (où isStart est instancié comme vrai):

public myClass(String name){ 
    setSize(800, 800); 
    setVisible(true); 
    setResizable(false); 
    runGame() 
} 

public void paint(Graphics g) { 
    if(nowStarting) 
     g.drawImage(WelcomeGameScreen, 0, 0, null); 
    isStart = false; 
} 

Le problème est que l'image apparaîtra une seconde puis disparaître? Bizarrement, cela fonctionne quand j'omets la condition if statement/isStart. Quel est le problème avec ça?

Répondre

1

Je suppose que vous n'avez pas copié textuellement le code, et il y a une erreur dans votre code ci-dessus. Si votre code est ce que je pense qu'il est ...

public void paint(Graphics g) { 
    if(isStart) 
     g.drawImage(WelcomeGameScreen, 0, 0, null); 
    isStart = false; 
} 

Ensuite, il dessinera votre écran de démarrage. Mais, puisque vous définissez isStart sur false, la prochaine fois que la peinture sera appelée, l'image ne sera plus dessinée. La méthode de peinture est appelée chaque fois que le système d'exploitation indique à l'écran qu'il doit être actualisé (et lorsque vous le forcez à le repeindre). La façon dont vous pouvez contourner ce problème est de mettre isStart à false dans votre application lorsque le jeu a fini de charger, puis d'appeler repaint.

0

Je suppose que votre booléen newStarting est remplacé par false dès que le panneau est peint.

+0

Ouais - mais ne devrait-il pas entrer l'instruction if une fois et peindre l'arrière-plan une fois? Ensuite, il quitterait la méthode paint(), et ne reviendrait pas car je n'appellerai plus repaint(). (Pas encore, c'est.) –

0

La raison pour laquelle il disparaît immédiatement est à cause des repaints qui sont déclenchés par le framework Swing. De plus, vous avez écrit le code de l'écran de bienvenue dans la méthode override paint().

Référez-vous au lien this pour une explication détaillée de la manière de déclencher une fenêtre d'accueil. Vous avez également une classe SplashScreen en Java 1.6

+0

Existe-t-il un autre moyen? Un qui traite de JFrame et non de JWindow? –