分数随动作增加而增加

时间:2013-06-03 12:08:38

标签: java android andengine sprite

当我在精灵上触摸手指时,得分随机增加而不是固定率我意味着我设定得分 每次增加50但是当我滚动精灵时,它有时会增加100,有时增加150和200;

       mHardware1[active] = new Sprite(pX, pY, samsung,
                this.getVertexBufferObjectManager()) {
            @Override
            public boolean onAreaTouched(TouchEvent pSceneTouchEvent,
                    float X, float Y) {
                if (pSceneTouchEvent.isActionMove()) {
                    scene.detachChild(mHardware1[active]);
                    score+50;

}

当我使用isActionDown代替isActionMove但是我正在使用像水果忍者一样的游戏,我需要在屏幕上滚动手指,为什么我不能使用isActionDown

2 个答案:

答案 0 :(得分:1)

您可以使用SurfaceScrollDetector,它可以检测用户何时在屏幕上滑动手指。它有以下与之相关的事件:

  • onScrollStarted
  • onScroll
  • onScrollFinished

我猜你到达onScrollFinished时可以增加50。 我目前正在使用SurfaceScrollDetector进行项目,但我没有以你要问的方式使用它,所以我不能说它是否能按预期工作。

以下是使用它的示例之一(除PinchZoomDetector外): https://github.com/nicolasgramlich/AndEngineExamples/blob/GLES2/src/org/andengine/examples/PinchZoomExample.java

答案 1 :(得分:0)

场景更新发生在与UI事件不同的线程上,因此在事件处理程序意识到精灵已被分离之前,可能会有多个排队的触摸屏事件通过。

设置一个本地布尔变量来防止这种情况,例如:

boolean touchProcessed = false;
mHardware1[active] = new Sprite(pX, pY, samsung,
            this.getVertexBufferObjectManager());

@Override
public boolean onAreaTouched(TouchEvent pSceneTouchEvent,
        float X, float Y) {
    if (!touchProcessed & pSceneTouchEvent.isActionMove()) {
        touchProcessed = true;
        scene.detachChild(mHardware1[active]);
        score += 50;
    }
}

请注意,您可以使用:mHardware1[active].detachSelf()代替scene.detachChild(...)

另请注意,您应该在更新线程中的精灵中进行分离,因此:

boolean touchProcessed = false;
mHardware1[active] = new Sprite(pX, pY, samsung,
            this.getVertexBufferObjectManager());

@Override
public boolean onAreaTouched(TouchEvent pSceneTouchEvent,
        float X, float Y) {
    if (!touchProcessed & pSceneTouchEvent.isActionMove()) {
        touchProcessed = true;
        score += 50;
        engine.runOnUpdateThread(new Runnable() {
             @Override
             public void run() {
                 mHardware1[active].detachSelf();
             }
        });
    }
}