0

如何在 isActionMove() 上执行单点触摸,因为当我在精灵上移动手指时,它需要多点触摸事件并三次更新分数

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

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

我不能使用 isActionDown 因为它是一个像水果忍者这样的游戏,我现在需要在屏幕上移动手指

4

3 回答 3

3

你应该使用

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;
    }
});
于 2013-06-04T08:33:44.563 回答
0

julien dumortier 给出的解决方案运行良好

static boolean isFirstMove=true;

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

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

});

于 2013-06-06T05:25:01.577 回答
0

如果您发现上述答案对您来说是正确的,那么我对此有一些建议。您必须为您的游戏场景实现场景和区域触摸事件。

SceneTouch 事件方法包含两个事件 isActionDown() 和 isActionUp(),如下面的代码所示。

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

Area Touch 方法仅包含单个事件 isActionMove(),如下面的代码所示。

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

您必须遵循上述策略,因为您的精灵不会发生某些时间欲望事件,因此您不会得到您想要的结果。

于 2013-06-04T16:32:07.337 回答