2017-08-25 2 views
0

Dans mon application, j'ai besoin de jouer du son sur un clic de souris (un roulement de dés pour être plus précis) mais je ne veux pas jouer le même son que le précédent un depuis lancer un dé ne fait jamais le même son.Android: recherche de l'équivalent d'utiliser le commutateur avec variable

Donc, j'ai 4 son différent et je veux prendre, si possible, avec la même probabilité, l'un d'entre eux qui ne soit déjà joue

Pour ce faire, je veux utiliser:

MediaPlayer sound1, sound2, sound3, sound4; 
Random rnd; 

//Random and MediaPlayer are set up in the onCreate method 

public void playSound() { 
    int a, b, c, d, pos = 0, neg = 0; 

    if (sound1.isPlaying()) {neg++; a = neg;} else {pos++; a = pos;} 
    if (sound2.isPlaying()) {neg++; b = neg;} else {pos++; b = pos;} 
    if (sound3.isPlaying()) {neg++; c = neg;} else {pos++; c = pos;} 
    if (sound4.isPlaying()) {neg++; d = neg;} else {pos++; d = pos;} 
    //available MediaPlayer associated to 1, 2, 3 ... 
    //other MediaPlayer associated to -1, -2, -3 ... 

    if (pos>0){ 
     switch (rnd.nextInt(pos) + 1) { 
      case a: sound1.start(); break; 
      case b: sound2.start(); break; 
      case c: sound3.start(); break; 
      case d: sound4.start(); break; 
     } 
    } 
    //pick a MediaPlayer among those associated to a positive number 
} 

mais Android ne permet pas d'utiliser la variable avec le cas, donc je reçois une erreur « d'expression constante requise »

la question est: comment puis-je faire la même chose en utilisant les choses android permettent d'utiliser?

En tant que débutant, je n'a pas trouvé de réponse, sauf en utilisant un « si » qui, par un géant « si » est la liste de tous les cas possibles

(Je ne suis pas vraiment intéressé, puisque je prévois d'ajouter 2 ou 3 autres sons, le nombre de possibilité atteindra 2^6 ou 2^7, ce qui signifie 64 ou 128)

vous remercie à l'avance

Répondre

1

Si vous permettez à vos sons à placer dans un tableau (beaucoup meilleure approche pour quand vous voulez ajouter plus d'entre eux) vous pouvez faire tout cela beaucoup plus facilement.

en Java (en utilisant 8 ici):

MediaPlayer sounds[] = {sound1, sound2, sound3, sound4}; 
Random rnd; 

public void playSound() { 
    // Collect candidates - i.e. those that aren't playing right now. 
    List<MediaPlayer> candidates = Arrays.stream(sounds) 
      // Only not-playing ones. 
      .filter(s -> !s.isPlaying()) 
      .collect(Collectors.toList()); 
    // Pick a random one. 
    MediaPlayer picked = candidates.get(rnd.nextInt(candidates.size())); 
    // Play your sound. 

} 

une version Java 7 de la rencontre des candidats

// Collect candidates - i.e. those that aren't playing right now. 
    List<MediaPlayer> candidates = new ArrayList<>(); 
    for (int i = 0; i < sounds.length; i++) { 
     if (!sounds[i].isPlaying()) { 
      candidates.add(sounds[i]); 
     } 
    } 
+1

i ajouté « si (candidates.size()> 0) "avant de choisir le lecteur multimédia pour éviter les erreurs, vous avez résolu mon problème – Ericu