触摸时使Sprite可拖动

时间:2014-06-25 06:44:31

标签: touch andengine sprite area

有没有办法让sprite可以拖动但只有当sprite本身被触摸时?目前我有我的游戏,它使用了发动机,设置到精灵跟随你的手指从那里触摸场景的时间。如果你触摸场景的另一侧,精灵会被“传送”,这是我不想要的。

我尝试覆盖精灵的onAreaTouched方法,并将其坐标设置为手指当前的位置,但这并不能很好地工作。如果你做出突然的动作,那么扯淡就会消失。

有没有简单的方法来实现这个目标?

1 个答案:

答案 0 :(得分:0)

回答我自己的问题......我使用了这段代码并且完美无缺:

        draggableSprite = new Sprite(CAM_WIDTH/2, CAM_HEIGHT/2, 
        spriteTextureRegion, mVertexBufferObjectManager){

        @Override
        public boolean onAreaTouched(TouchEvent pSceneTouchEvent,
                float pTouchAreaLocalX, float pTouchAreaLocalY) {

                if(pSceneTouchEvent.isActionMove()){
                    spriteIsTouched = true;
                }
                else{
                    spriteIsTouched = false;
                }
            return super
                    .onAreaTouched(pSceneTouchEvent, pTouchAreaLocalX, pTouchAreaLocalY);
        }

    };
    scene.attachChild(draggableSprite);
    scene.registerTouchArea(draggableSprite);

    scene.setOnSceneTouchListener(new IOnSceneTouchListener() {

        @Override
        public boolean onSceneTouchEvent(Scene pScene, TouchEvent pSceneTouchEvent) {
            // TODO Auto-generated method stub

            if(spriteIsTouched){
                draggableSprite.setPosition(pSceneTouchEvent.getX() - (draggableSprite.getWidth()/2), pSceneTouchEvent.getY() - (draggableSprite.getHeight()/2)); 
                //This sets the position of the sprite and then
                //offsets the sprite so its center is at your finger
            }


            return false;
        }
    });`