Skip to content Skip to sidebar Skip to footer

Andengine, How To Move Sprite With Touchscreen

I begin with Andengine, and have difficulties to move my sprite when i touch the screen ( not the sprite ). I really need your help, thanks a lot. here is my code: @Override pr

Solution 1:

You can implement IOnSceneTouchListener interface, than override onSceneTouchEvent method, where you can act with your ball

@OverridepublicbooleanonSceneTouchEvent(Scene pScene, TouchEvent pSceneTouchEvent) {
     carl.setPosition(carl.getX() +2,carl.getY() );
    returnfalse;
}

but don't forget to add this scene.setOnSceneTouchListener(this); to protected Scene onCreateScene()

EDIT:

boolean canGo = false;

@OverridepublicbooleanonSceneTouchEvent(Scene pScene, TouchEvent pSceneTouchEvent) {
    if (pSceneTouchEvent.getAction() == MotionEvent.ACTION_DOWN)
        canGo = true;
    if (pSceneTouchEvent.getAction() == MotionEvent.ACTION_UP)
        canGo = false;
    returnfalse;
}

and this add to your public Scene onCreateScene() {

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

Solution 2:

You can also use the move modifier to move up and down.

publicclassMainActivityextendsBaseGameActivityimplementsIOnSceneTouchListener {

    privatestaticfinalintCAMERA_WIDTH=800;
    privatestaticfinalintCAMERA_HEIGHT=480;

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

    booleancanGo=false;

    publicstaticfinalStringTAG="Cowboy#";


    private Scene scene;

    @Overridepublic EngineOptions onCreateEngineOptions() {
        Cameracamera=newCamera(0,0, CAMERA_WIDTH, CAMERA_HEIGHT);
        returnnewEngineOptions(true, ScreenOrientation.LANDSCAPE_FIXED, newFillResolutionPolicy(), camera);
    }

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

        pOnCreateResourcesCallback.onCreateResourcesFinished();
    }

    @OverridepublicvoidonCreateScene(OnCreateSceneCallback pOnCreateSceneCallback)throws IOException {
        scene = newScene();
        scene.setOnSceneTouchListener(this);

        characterAnimatedSprite = newAnimatedSprite(120, 120, characterTiledTextureRegion, mEngine.getVertexBufferObjectManager()){


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

        scene.attachChild(characterAnimatedSprite);
        scene.setBackground(newBackground(Color.CYAN));
        scene.registerUpdateHandler(newIUpdateHandler() {
            @Overridepublicvoidreset() {}
            @OverridepublicvoidonUpdate(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){
                    finalfloatduration=1;
//                    final float duration = 3;finalfloatfromX= characterAnimatedSprite.getX();
                    finalfloattoX= characterAnimatedSprite.getX();
                    finalfloatfromY= characterAnimatedSprite.getY();
                    finalfloattoY= characterAnimatedSprite.getY() + 80;


                    //you can move in on axis using MoveYModifier or MoveXModifier//                    MoveYModifier mod1=new MoveYModifier(constanttime,fromY,toY);//                    sprite.registerEntityModifier(mod1);finalMoveModifierdownMoveModifier=newMoveModifier(0.4f, fromX, toY, toX, fromY, newIEntityModifier.IEntityModifierListener() {
                        @OverridepublicvoidonModifierStarted(IModifier<IEntity> pModifier, IEntity pItem) {
                            characterAnimatedSprite.stopAnimation(0);
                        }

                        @OverridepublicvoidonModifierFinished(IModifier<IEntity> pModifier, IEntity pItem) {
                            characterAnimatedSprite.animate(50);
                        }
                    });

                    finalMoveModifierupMoveModifier=newMoveModifier(0.2f, fromX, fromY, toX, toY, newIEntityModifier.IEntityModifierListener() {
                        @OverridepublicvoidonModifierStarted(IModifier<IEntity> pModifier, IEntity pItem) {
                            characterAnimatedSprite.stopAnimation(0);
                        }

                        @OverridepublicvoidonModifierFinished(IModifier<IEntity> pModifier, IEntity pItem) {
                            characterAnimatedSprite.registerEntityModifier(downMoveModifier);
                        }
                    });

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

    @OverridepublicvoidonPopulateScene(Scene pScene, OnPopulateSceneCallback pOnPopulateSceneCallback)throws IOException {
        pOnPopulateSceneCallback.onPopulateSceneFinished();
    }

    @OverridepublicbooleanonSceneTouchEvent(Scene pScene, TouchEvent pSceneTouchEvent) {

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

Post a Comment for "Andengine, How To Move Sprite With Touchscreen"