Bonjour ! Je vous écrit car j'ai besoin d'aide, je débute en JAVA.. j'ai créé un bouton pause sur un jeu sous Android Studio, et la manière que j'ai trouvé pour mettre en pause la boucle évènementielle est d'utiliser un sleep. (dans une boucle à l'infinie) avec pour condition un booléen, qui devient faux lorsque je presse de nouveau sur START. MAIS la boucle continue, je ne comprends pas pourquoi .. Voici mon code :
( un bout qui est dans une classe de mon projet ) :
private void processUserAction(){
//On recupère la dernière action
UserAction action = GameState.getInstance().getUserAction();
switch (action) {
case LEFT:
moveLeft();
break;
case RIGHT:
moveRight();
break;
case ROTATE:
rotate();
break;
case FALL:
fall();
break;
case PAUSE:
pause();
break;
case START:
restart();
break;
}
//On définit la dernière action à nulle
GameState.getInstance().setUserAction(UserAction.NONE);
}
private void pause() {
ps = true;
while (ps) {
try {
sleep(4000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
private void restart() {
ps=false;
}
donc lorsque le case START se lance, normalement ps prend la valeur false et la boucle devrait s'arrêter...
Voici aussi mon mainActivity si ça peut vous aider à comprendre :
public void pauseButton(View view) {
if (ps2 == false) {
ps2=true;
GameState.getInstance().setUserAction(UserAction.PAUSE);
mediaPlayer.pause();
} else {
ps2=false;
GameState.getInstance().setUserAction(UserAction.START);
mediaPlayer.start();
}
Alors oui, quand je lance mon jeu et que j'appuie sur pause, la musique s'arrête et la pièce aussi donc on est bien présents dans la boucle, ensuite si j'appuie de nouveau sur le bouton la musique repart (j'en déduis que ma méthode pauseButton fonctionne bien), c'est juste ma fonction restart qui n'est pas bonne.. soit je trouve une solution pour sortir du while, soit je change la fonction pause ..
Merci d'avance pour votre aide !
Modifié par lilemy11 (20 Mar 2018 - 13:49)
( un bout qui est dans une classe de mon projet ) :
private void processUserAction(){
//On recupère la dernière action
UserAction action = GameState.getInstance().getUserAction();
switch (action) {
case LEFT:
moveLeft();
break;
case RIGHT:
moveRight();
break;
case ROTATE:
rotate();
break;
case FALL:
fall();
break;
case PAUSE:
pause();
break;
case START:
restart();
break;
}
//On définit la dernière action à nulle
GameState.getInstance().setUserAction(UserAction.NONE);
}
private void pause() {
ps = true;
while (ps) {
try {
sleep(4000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
private void restart() {
ps=false;
}
donc lorsque le case START se lance, normalement ps prend la valeur false et la boucle devrait s'arrêter...
Voici aussi mon mainActivity si ça peut vous aider à comprendre :
public void pauseButton(View view) {
if (ps2 == false) {
ps2=true;
GameState.getInstance().setUserAction(UserAction.PAUSE);
mediaPlayer.pause();
} else {
ps2=false;
GameState.getInstance().setUserAction(UserAction.START);
mediaPlayer.start();
}
Alors oui, quand je lance mon jeu et que j'appuie sur pause, la musique s'arrête et la pièce aussi donc on est bien présents dans la boucle, ensuite si j'appuie de nouveau sur le bouton la musique repart (j'en déduis que ma méthode pauseButton fonctionne bien), c'est juste ma fonction restart qui n'est pas bonne.. soit je trouve une solution pour sortir du while, soit je change la fonction pause ..
Merci d'avance pour votre aide !
Modifié par lilemy11 (20 Mar 2018 - 13:49)