2013-01-27 3 views
6

Je crée un jeu qui utilise andendgine et voici mon code:caractère ne cesse de marcher

Player stanley = new Player(); 
... 

scene.registerUpdateHandler(new IUpdateHandler() { 
    public void onUpdate(float pSecondsElapsed) { 

    stanX = stanley.getX(); 
    destX = x.getX(); 

    if(destX < stanX){ 
    if(hasMovedRight == 1){ 
     stanley.stop(); 
     hasMovedRight = 0; 
    } 
    else{ 
     stanley.moveLeft(); 
     hasMovedRight = 0 
     hasMovedLeft = 1; 
    } 
    } 

    if(destX > stanX){ 
    if(hasMovedLeft == 1){ 
     stanley.stop(); 
     hasMovedLeft == 0; 
    } 
    else{ 
     stanley.moveRight(); 
     hasMovedLeft = 0; 
     hasMovedRight = 1; 
    } 
    } 
} 
} 

ce que je veux est d'arrêter le joueur de marcher chaque fois que sa position X est égale à la zone touchée X. Le problème est qu'il ne s'arrête jamais de marcher. Merci!

+0

Est-ce que vous essayez de déboguer votre code pour voir où il va mal? – Egor

Répondre

0

essayez celui-ci

setOnSceneTouchListener(new IOnSceneTouchListener() { 
@Override 
    public boolean onSceneTouchEvent(Scene scene, TouchEvent event) { 
    int touchX = (int) (event.getX() - (sCHARStanley.getWidth()/2)); 

    //so that your sprite will go to the touched part of the screen 
} 
5

Vos instructions if manquent un élément où destX == stanX. et vous devriez vraiment utiliser autre si. Voir le code modifié ci-dessous.

if(destX + 8 < stanX){ 
    if(hasMovedRight == 1){ 
     stanley.stop(); 
     hasMovedRight = 0; 
    } 
    else{ 
     stanley.moveLeft(); 
     hasMovedRight = 0 
     hasMovedLeft = 1; 
    } 
    } 
    else if(destX - 8 > stanX){ 
    if(hasMovedLeft == 1){ 
     stanley.stop(); 
     hasMovedLeft == 0; 
    } 
    else{ 
     stanley.moveRight(); 
     hasMovedLeft = 0; 
     hasMovedRight = 1; 
    } 
    } 
    else //makes stanley stop. (calls stop method), if at touched x. 
    { 
     stanley.stop(); 
     hasMovedRight = 0; 
     hasMovedLeft = 0; 
    } 
+0

C'est l'un de mes problèmes. TouchX et StanX n'ont jamais été égaux. J'ai essayé de voir le logcat pour le débogage mais il montre un intervalle de 7 à la place. Comme: StanX: 24 TouchX: 30 StanX: 31 TouchX: 30 StanX: 38 TouchX: 30 –

+0

@NobodyWantsTo Donc vous augmentez StanX en multiples de quelque chose plutôt que 1 à la fois. Dans ce cas, modifiez les instructions if pour vérifier une plage. Voir le code modifié. – Doomsknight

+0

Woops, je me suis trompé ... voir maintenant. Fondamentalement vérifier son dans les 8 (ou quelle que soit la valeur) de TouchX. plutôt que exactement égal – Doomsknight