2017-08-15 2 views
0

Je crée un jeu qui a deux méthodes spécifiques pour contrôler l'acteur. Méthode 1- sauter, et méthode 2- jump_higher. Et le même son joue sur l'action. Pour gérer l'entrée, j'utilise une classe InputHandler qui utilise l'import com.badlogic.gdx.InputProcessor; Et le code comme suit:Android Studio avec Libgdx: L'effet sonore ne fonctionne pas correctement sur l'événement touch et touchdrag

import com.badlogic.gdx.InputProcessor; 
/*some other imports*/ 

public class InputHandler implements InputProcessor { 
/* Variable declaration and constructor*/ 


@Override 
public boolean touchDown(int screenX, int screenY, int pointer, int button){ 
    Actor.jump(); 
    return true; 
} 

@Override 
public boolean touchDragged(int screenX, int screenY, int pointer) { 
    if (Gdx.input.getDeltaY() < -20) { 
     Actor.jump_higher(); 
    } 
    return true; 
}} 

et dans ma classe Acteur:

public class Bird { 
/* Variable declaration and constructor*/ 

public void jump() { 
    if (isAlive){ 
     AssetLoader.JUMP.play(); 
     velocity.y = -700; 
    } 
} 

public void jump_higher() { 
    if (isAlive){ 
     AssetLoader.JUMP.play(); 
     velocity.y = -1050; 
    } 
}} 

Comme l'action Touchdown fait le saut de l'acteur, et la méthode de saut en jouant le son. Le jeu fonctionne parfaitement sauf le son sur l'événement jump_higher. Sur l'événement touchDragged, le son ne joue pas correctement, il sonne comme BURRRRRRRPS (désolé pour un mot incorrect). Comme il prend toute la saisie de la voie de traînée comme touchDown. Je veux juste jouer le son une seule fois sur chaque événement. Besoin d'aide concernant la bonne façon de mettre en œuvre l'événement tactile.

Merci.

Répondre

0

Vous pouvez utiliser l'indicateur pour vos besoins:

boolean isHigherJump; 

Et utiliser ce drapeau à l'intérieur jump_higher() méthode

public void jump_higher() { 
    if (isAlive){ 
     if(!isHigherJump){ 
      AssetLoader.JUMP.play(); 
      isHigherJump=true; 
     } 
     velocity.y = -1050; 
    } 
}} 

réinitialiser votre drapeau dans la méthode touchUp(..) de InputProcessor

@Override 
public boolean touchUp(int screenX, int screenY, int pointer, int button) { 
    Actor.isHigherJump=false; 
    return false; 
}