2015-03-31 1 views
0

Je développe un jeu où LittleMan peut bouger de bloc en bloc, et certains blocs bougent. J'essaie de détecter quand il se déplace vers un nouveau bloc en mouvement, si ce bloc est en dessous de lui ou s'il a bougé. J'utilise le TimerHandler d'Andengine pour vérifier toutes les 0.1 secondes mais cela ne fonctionne pas. Voici le code:Andengine TimerHandler et détecter les collisions

private void OnMovingBlock(final int CurrentPosRow, final int CurrentPosColumn) { 
    this.getEngine().registerUpdateHandler(new TimerHandler(0.1f, true, new ITimerCallback() { 
     @Override 
     public void onTimePassed(final TimerHandler pTimerHandler) { 
      if (LittleManPos[0] == CurrentPosRow && LittleManPos[1] == CurrentPosColumn) { 
       if (!LittleMan.collidesWith(MapRectangles[CurrentPosRow][CurrentPosColumn])) { 

        RestartScene(); 

       } 
      } 
     } 
    })); 

} 

Il semble qu'il peut se déplacer au bloc et rester là avec elle entrant et sortant en dessous de lui, mais il ne pas appeler RestartScene() jusqu'à ce que je le déplace à nouveau. Une idée d'où je vais mal? Ou est-ce qu'il y a un autre moyen de le faire?

Répondre

0

Pourquoi ne pas créer un Timer?

TimerTask task = new TimerTask(){ 
    @Override 
    public void run(){ 
     // your code goes here 
    } 
}; 

Timer timer = new Timer(); 
timer.sechedule(task, 0, 100); // 100 --> 0.1 second 

Pour annuler la Timer, appelez timer.cancel();.

+0

Merci, cela aide beaucoup! Je voudrais upvote votre commentaire, mais il me dit que je suis trop nouveau, désolé =/J'espère pouvoir imposer une autre question sur le code que vous avez fourni: Est-il possible d'utiliser timer.cancel() WITHIN la méthode d'exécution? Tels que dans mon code d'origine dans les déclarations si, si une condition est assortie, puis-je annuler le minuteur? Merci beaucoup! – terrierist