2012-11-17 46 views
3

我以Andengine开头,当我触摸屏幕(不是精灵)时,难以移动我的精灵。我真的需要你的帮助,非常感谢。Andengine,如何用触摸屏移动精灵

这里是我的代码:

@Override 
protected Scene onCreateScene() { 
    final Scene scene = new Scene(); 
    Sprite backgroundSprite = new Sprite(0, 0, this.mBackgroundTextureRegion, getVertexBufferObjectManager()); 
    scene.attachChild(backgroundSprite); 
    Carl carl = new Carl(1, 30, 361, this.carl, getVertexBufferObjectManager()){ 

     }; 

    scene.attachChild(carl); 



    this.mStack1.add(carl); 
    carl.setmStack(mStack1); 
    scene.registerTouchArea(carl); 
    scene.setTouchAreaBindingOnActionDownEnabled(true); 


    return scene; 
} 
public boolean onTouchEvent(MotionEvent event, Carl carl) { 

    carl.setPosition(carl.getX() +2,carl.getY()); 
    return true; 
} 

回答

3

您可以实现IOnSceneTouchListener接口,比覆盖onSceneTouchEvent方法,在这里你可以与你的球

@Override 
public boolean onSceneTouchEvent(Scene pScene, TouchEvent pSceneTouchEvent) { 
    carl.setPosition(carl.getX() +2,carl.getY()); 
    return false; 
} 

行动,但不要忘了添加此scene.setOnSceneTouchListener(this);protected Scene onCreateScene()

编辑:

boolean canGo = false; 

@Override 
public boolean onSceneTouchEvent(Scene pScene, TouchEvent pSceneTouchEvent) { 
    if (pSceneTouchEvent.getAction() == MotionEvent.ACTION_DOWN) 
     canGo = true; 
    if (pSceneTouchEvent.getAction() == MotionEvent.ACTION_UP) 
     canGo = false; 
    return false; 
} 

,并添加到您的public Scene onCreateScene() {

scene.registerUpdateHandler(new IUpdateHandler() { 
    @Override 
    public void reset() {} 
    @Override 
    public void onUpdate(float pSecondsElapsed) { 
     // TODO Auto-generated method stub 
     if (canGo) 
      ball.setPosition(ball.getX() + 2, ball.getY()); 
    } 
}); 
+0

好的非常感谢你,现在onSceneTouchEvent的功能工作正常:D,但精灵的位置刷新不起作用,它怎么做? –

+0

奇怪,例如我做到了这一点:ball.setPosition(pSceneTouchEvent.getX(),pSceneTouchEvent.getY());它将球设置到被点击的位置。你能描述一下你想要什么球吗? – Aleksandrs

+0

这不是一个球,它是一个角色,我只是想让他在我们触摸屏幕时向右移动。 –

0

您也可以使用移动修饰符来上下移动。

public class MainActivity extends BaseGameActivity implements IOnSceneTouchListener { 

    private static final int CAMERA_WIDTH = 800; 
    private static final int CAMERA_HEIGHT = 480; 

    private BitmapTextureAtlas characterTextureAtlas; 
    private ITiledTextureRegion characterTiledTextureRegion; 
    private AnimatedSprite characterAnimatedSprite; 

    boolean canGo = false; 

    public static final String TAG = "Cowboy#"; 


    private Scene scene; 

    @Override 
    public EngineOptions onCreateEngineOptions() { 
     Camera camera = new Camera(0,0, CAMERA_WIDTH, CAMERA_HEIGHT); 
     return new EngineOptions(true, ScreenOrientation.LANDSCAPE_FIXED, new FillResolutionPolicy(), camera); 
    } 

    @Override 
    public void onCreateResources(OnCreateResourcesCallback pOnCreateResourcesCallback) throws IOException { 
     BitmapTextureAtlasTextureRegionFactory.setAssetBasePath("gfx/"); 
     characterTextureAtlas = new BitmapTextureAtlas(mEngine.getTextureManager(), 640, 320, TextureOptions.BILINEAR); 
     characterTiledTextureRegion = BitmapTextureAtlasTextureRegionFactory.createTiledFromAsset(characterTextureAtlas, this, "walkman640x320.png", 0, 0, 8, 1); 
     characterTextureAtlas.load(); 

     pOnCreateResourcesCallback.onCreateResourcesFinished(); 
    } 

    @Override 
    public void onCreateScene(OnCreateSceneCallback pOnCreateSceneCallback) throws IOException { 
     scene = new Scene(); 
     scene.setOnSceneTouchListener(this); 

     characterAnimatedSprite = new AnimatedSprite(120, 120, characterTiledTextureRegion, mEngine.getVertexBufferObjectManager()){ 


      @Override 
      protected void onManagedUpdate(float pSecondsElapsed) { 
       super.onManagedUpdate(pSecondsElapsed); 
//    Log.d(TAG, "onManagedUpdate: counting#"); 
      } 
     }; 
     characterAnimatedSprite.animate(50); 

     scene.attachChild(characterAnimatedSprite); 
     scene.setBackground(new Background(Color.CYAN)); 
     scene.registerUpdateHandler(new IUpdateHandler() { 
      @Override 
      public void reset() {} 
      @Override 
      public void onUpdate(float pSecondsElapsed) { 
       // TODO Auto-generated method stub 
       //moves character 2 steps forward along x-axis 
//    if (canGo){ 
//     characterAnimatedSprite.setPosition(characterAnimatedSprite.getX() + 2, characterAnimatedSprite.getY()); 
//    } 
       //moves character 8 steps upward along y-axis and back 
//    if (canGo){ 
//     characterAnimatedSprite.setPosition(characterAnimatedSprite.getX(), characterAnimatedSprite.getY()+30); 
////     characterAnimatedSprite.setPosition(characterAnimatedSprite.getX(), characterAnimatedSprite.getY()-8); 
//    } 

       if (canGo){ 
        final float duration = 1; 
//     final float duration = 3; 
        final float fromX = characterAnimatedSprite.getX(); 
        final float toX = characterAnimatedSprite.getX(); 
        final float fromY = characterAnimatedSprite.getY(); 
        final float toY = characterAnimatedSprite.getY() + 80; 


        //you can move in on axis using MoveYModifier or MoveXModifier 
//     MoveYModifier mod1=new MoveYModifier(constanttime,fromY,toY); 
//     sprite.registerEntityModifier(mod1); 

        final MoveModifier downMoveModifier = new MoveModifier(0.4f, fromX, toY, toX, fromY, new IEntityModifier.IEntityModifierListener() { 
         @Override 
         public void onModifierStarted(IModifier<IEntity> pModifier, IEntity pItem) { 
          characterAnimatedSprite.stopAnimation(0); 
         } 

         @Override 
         public void onModifierFinished(IModifier<IEntity> pModifier, IEntity pItem) { 
          characterAnimatedSprite.animate(50); 
         } 
        }); 

        final MoveModifier upMoveModifier = new MoveModifier(0.2f, fromX, fromY, toX, toY, new IEntityModifier.IEntityModifierListener() { 
         @Override 
         public void onModifierStarted(IModifier<IEntity> pModifier, IEntity pItem) { 
          characterAnimatedSprite.stopAnimation(0); 
         } 

         @Override 
         public void onModifierFinished(IModifier<IEntity> pModifier, IEntity pItem) { 
          characterAnimatedSprite.registerEntityModifier(downMoveModifier); 
         } 
        }); 

        characterAnimatedSprite.registerEntityModifier(upMoveModifier); 
       } 
      } 
     }); 
     pOnCreateSceneCallback.onCreateSceneFinished(scene); 
    } 

    @Override 
    public void onPopulateScene(Scene pScene, OnPopulateSceneCallback pOnPopulateSceneCallback) throws IOException { 
     pOnPopulateSceneCallback.onPopulateSceneFinished(); 
    } 

    @Override 
    public boolean onSceneTouchEvent(Scene pScene, TouchEvent pSceneTouchEvent) { 

     if (pSceneTouchEvent.getAction() == MotionEvent.ACTION_DOWN) 
      canGo = true; 
     if (pSceneTouchEvent.getAction() == MotionEvent.ACTION_UP) 
      canGo = false; 
     return false; 
    } 
}