Fermer correctement une SurfaceView
Bonjour,
Je travaille actuellement sur un petit jeu. Les menus sont gérés par des layouts et le rendu du jeu en lui même est géré par une SurfaceView.
Game (Activity):
->Layout (menus)
->SurfaceView ->Thread
Le thread permet de produire la boucle principale. Lorsque je lance le jeu (surfaceview) je lance avec la view (setContent) le thread. Jusque là pas de problème. Cependant, je trouve pas la solution pour revenir aux menus en sachant que la fonction est appelé dans le Game (Activity) mais depuis la surfaceView donc le thread.
En toute logique, je dois stopper le thread et faire un setContent(R.layout.menu) mais le fait de stopper le thread "bloque" la fonction (enfin j'en ai l'impression parce que le jeu freeze sans crasher).
Game:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
|
public void stopGamePanel()
{
try
{
gamePanel.gameThread.join();
}
catch (InterruptedException e)
{
}
setMainMenu();
}
public void setMainMenu()
{
setContentView(R.layout.main_menu);
//PLAY
final Button buttonPlay = (Button)findViewById(R.id.buttonPlay);
buttonPlay.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
setContentView(gamePanel);
gamePanel.requestFocus();
}
});
//STATS
final Button buttonStats = (Button)findViewById(R.id.buttonStats);
buttonStats.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
setStatsMenu();
}
});
//QUIT
final Button buttonQuit = (Button)findViewById(R.id.buttonQuit);
buttonQuit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
} |
La fonction stopGamePanel est est appelé depuis le gamPanel (SurfaceView).
Merci