Domanda

how to perform single touch on isActionMove() because when i move finger on sprites it takes multipal touch events and update scores twice thrice

mHardware[active] = new Sprite(pX, pY, java, this.getVertexBufferObjectManager()) {

    @Override
    public boolean onAreaTouched(TouchEvent pSceneTouchEvent, float X, float Y) {
        if (pSceneTouchEvent.isActionMove()) {
            score++;
        }
    }
};

i cant use isActionDown because its a game like fruit ninja in which i need to move finger across screen now problem is score is sometimes increasse by 2 sometimes by 3 because when i move finger on sprite application notices several short movements in place of one

È stato utile?

Soluzione

you should use

private static boolean isFirstMove;
public boolean onAreaTouched(TouchEvent pSceneTouchEvent, float X, float Y) {
    if (pSceneTouchEvent.isActionDown()) {
       isFirstMove = true;
    }
    if (pSceneTouchEvent.isActionMove()) {
        if(isFirstMove) {
            score++;
            isFirstMove = false;
        }
    }
    if (pSceneTouchEvent.isActionUp()) {
        isFirstMove = false;
    }
});

Altri suggerimenti

If you found some what above answer correct for you then I have some suggestion in this. You have to implement both scene and area touch event for your game scene.

SceneTouch event method contains two events isActionDown() and isActionUp() like in the following code.

public void onSceneTouchEvent(...){
    if(pSceneTouchEvent.isActionDown()){
        isFirstTouch=true;
        return true;
    } else if(pSceneTouchEvent.isActionUp()){
        isFirstTouch=false;
        return true;
    }
    return false;
}

Area Touch method contains only single event isActionMove() like in the following code.

public void onAreaTouch(...){
    if(pSceneTouchEvent.isActionMove()){
       if(isFirstMove) {
           score++;
           isFirstMove = false;
        }
        return true;
    } 
    return false;
}

You have to follow above strategy because some time desire event not occur for your sprite so you don't get your desire result.

solution given by julien dumortier is working perfectly

static boolean isFirstMove=true;

public boolean onAreaTouched(TouchEvent pSceneTouchEvent, float X, float Y) {

if (pSceneTouchEvent.isActionMove()) {
    if(isFirstMove) {
        score++;
        isFirstMove = false;
    }
}

});

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top