2014-06-20 2 views
1


화면 아날로그 컨트롤을 사용하여 한 명의 플레이어가 화면에서 움직이는 게임을 개발 중입니다.
적의 스프라이트가 주기적으로 추가되고 플레이어쪽으로 이동합니다. 아래의 코드를 사용하여 적을 추가하고 있습니다. 나는 모든 적 방향을 변경하고 플레이어쪽으로 이동해야합니다 같은 결과를 원하는 아날로그 제어와 플레이어를 이동할 때AndEngine의 스프라이트 무브먼트에 대한 도움이 필요합니다.

public void addTarget() { 
    Random rand = new Random(); 

    float x = (camera.getWidth() + resourcesManager.evilone_region.getWidth()); 
    float minY = resourcesManager.evilone_region.getHeight(); 
    int maxY = (int) (camera.getHeight() - resourcesManager.evilone_region 
     .getHeight()); 
    int rangeY = (int) (maxY - minY); 
    float y = rand.nextInt(rangeY) + minY; 

    target = new AnimatedSprite(x, y, resourcesManager.evilone_region.deepCopy(),vbom){ 
     @Override 
     protected void preDraw(GLState pGLState, Camera pCamera) 
     { 
      super.preDraw(pGLState, pCamera); 
      pGLState.enableDither(); 
     } 
     @Override 
     protected void onManagedUpdate(float pSecondsElapsed) 
     { 
      super.onManagedUpdate(pSecondsElapsed); 
      if(isPlayerMoved){ 
       this.registerEntityModifier(new MoveModifier(2, target.getX(),player.getX(),target.getY(),player.getY())); 
      } 
     } 

    }; 
    attachChild(target); 

    target.setCullingEnabled(true); 
    final long[] PLAYER_ANIMATE = new long[] {100, 100, 100}; 
    target.animate(PLAYER_ANIMATE, 0, 2, true); 

    int minDuration = 2; 
    int maxDuration = 4; 
    int rangeDuration = maxDuration - minDuration; 
    int actualDuration = rand.nextInt(rangeDuration) + minDuration; 

    mod = new MoveModifier(actualDuration, target.getX(),player.getX(),target.getY(),player.getY()); 

    target.registerEntityModifier(mod.deepCopy()); 
    TargetsToBeAdded.add(target); 

} 
private void createSpriteSpawnTimeHandler() { 
    float mEffectSpawnDelay = 1f; 

    eviloneTimerHandler = new TimerHandler(mEffectSpawnDelay, true, 
    new ITimerCallback() { 

     @Override 
     public void onTimePassed(TimerHandler pTimerHandler) { 
      if(isPaused){ 

      }else{ 
       //resourcesManager.targetbird.play(); 
       addTarget(); 
      } 

     } 
    }); 

    engine.registerUpdateHandler(eviloneTimerHandler); 
} 



이제 문제입니다. 그러나이 코드를 사용하면 모든 적들이 첫 번째로 추가 된 적을 향해 이동하고 모두 모두 서로 붕괴되는 것처럼 매우 이상하게 보이는 플레이어쪽으로 이동합니다.
도와주세요.

답변

1

적을 플레이어에게 직접 이동시키지 않았습니다. 업데이트 할 때마다 5 픽셀 씩 이동할 수 있습니다. 다음은 예제입니다.이 코드는 개선되어야합니다 :

 @Override 
     protected void onManagedUpdate(float pSecondsElapsed) 
     { 
      super.onManagedUpdate(pSecondsElapsed); 

      if(player.getX() > target.getX()) 
      { 
       //Move your enemy 5 pixels to right 
      } 
      else 
       //Move your enemy 5 pixels to left 

      if(player.getY() > target.getY()) 
      { 
       //Move your enemy 5 pixels to down 
      } 
      else 
       //Move your enemy 5 pixels to up 
     } 

참고 : 대상이 플레이어에 도달했는지 확인하는 것을 잊지 마십시오. 그리고 이동하기 전에 목표물이 움직이는 지 확인하십시오. boolean을 사용하여 그것을 chechk 할 수 있습니다. 희망이 도움이됩니다.

관련 문제