2012-06-08 4 views
4

Je crée un jeu simple avec AndEngine. Une balle est droppée vers un sol, et chaque fois qu'elle entre en collision avec le sol, je veux jouer un petit son de collision. Dans la méthode onUpdate(), je vérifie la collision et joue le son en conséquence.AndEngine - en retard lors de la lecture du son

J'utilise la classe Sound pour jouer du son (comme dans SoundExample of AndEngine). Test sur Samsung Galaxy S2.

Le problème est que le programme est retardé lorsque le son est joué. Et cela affecte même la physique du jeu (parfois la balle rebondit plus haut que le point le plus élevé lors de la désactivation du son).

Voici le code:

public void onUpdate(float pSecondsElapsed) { 
// mSound.play();  
if (this.mSprite.collidesWith(ball.getSprite())) {   
    if (!colliding && mSound != null){ // play sound for first collision only 
     mSound.play();   
     colliding = true; 
    } 
} 
else{ 
    colliding = false; 
} 

}

Si je retire mSound.play() ou garder son jeu (Supprimer le commentaire à la ligne 2), le programme fonctionne bien.

Est-ce que quelqu'un rencontre le même problème? Et avoir une solution pour se débarrasser du décalage? Merci beaucoup!

+1

J'ai réussi à résoudre ce problème simplement en appelant .play() dans un nouveau fil à chaque fois. Ce n'est pas la meilleure solution, je suppose, mais cela a pris du retard. – Ixanezis

Répondre

1

comme que vous avez mentionné qu'il fonctionne bien lorsque vous continuez à jouer le son .. le problème est pas avec le son

la méthode collidesWith() est probablement votre coupable, rappelez-vous que onUpdate est appelé chaque image. peut-être que vous devrez redéfinir votre code ou limiter le nombre d'images par seconde [changer les options de votre moteur pour utiliser un FixedStepEngine pour y parvenir]

+0

Non, même si je crée un nouveau thread en dehors de onUpdate pour lire le son (1 fois/seconde), le problème persiste. – Jack