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 : Sélectionner tout - Visualiser dans une fenêtre à part
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