Android 角色从不停止行走

Android 角色从不停止行走,android,andengine,Android,Andengine,我正在创建一个使用andendgine的游戏,下面是我的代码: Player stanley = new Player(); ... scene.registerUpdateHandler(new IUpdateHandler() { public void onUpdate(float pSecondsElapsed) { stanX = stanley.getX(); destX = x.getX(); if(destX < stanX){ if(has

我正在创建一个使用andendgine的游戏,下面是我的代码:

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;
    }
  }
}
}
Player stanley=新玩家();
...
registerUpdateHandler(新的IUUpdateHandler(){
更新时的公共无效(浮点psecondsappeased){
stanX=stanley.getX();
destX=x.getX();
如果(destXstanX){
如果(hasMovedLeft==1){
斯坦利,停下来;
hasMovedLeft==0;
}   
否则{
stanley.moveRight();
hasMovedLeft=0;
hasMovedRight=1;
}
}
}
}

我想要的是,当玩家的位置X等于接触区域X时,阻止其行走。问题是它永远不会停止行走。谢谢!

您的if语句缺少destX==stanX的元素。您应该真正使用else if。请参阅下面修改的代码

  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;
   }
if(destX+8stanX){
如果(hasMovedLeft==1){
斯坦利,停下来;
hasMovedLeft==0;
}   
否则{
stanley.moveRight();
hasMovedLeft=0;
hasMovedRight=1;
}
}
else//使stanley停止。(调用stop方法),如果在触摸x。
{
斯坦利,停下来;
hasMovedRight=0;
hasMovedLeft=0;
}
试试这个

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
}

您是否尝试调试代码以查看哪里出错?这是我的问题之一。TouchX和StanX从来都不相等。我尝试查看日志以进行调试,但它显示的间隔为7。例如:StanX:24 TouchX:30 StanX:31 TouchX:30 StanX:38 TouchX:30@NobodyWantsTo所以你在增加StanX的倍数,而不是一次不超过1。在这种情况下,请更改if语句以检查范围。请参阅修改的代码。Woops,将其搞错。请参阅。基本上检查其在8以内(或任何值)Doomsknight,只是想知道安德引擎如何管理斯坦利的步行,它必须有一个七的间隔?无论如何,玩家类是一个动画精灵,玩家实例有240x165IM的尺寸不确定。它可能是可定制的或可访问的值。我们的问题(?):我个人并没有用过发动机。它可能会根据屏幕密度而变化。。要调查的事情。