0

当我在精灵上触摸手指时,分数随机增加而不是固定速率我的意思是我将分数设置为每次增加 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

4

2 回答 2

1

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

  • onScrollStarted
  • onScroll
  • onScrollFinished

我猜当你到达 onScrollFinished 时你可以增加 50。我目前正在将 SurfaceScrollDetector 用于一个项目,但我没有以您询问的方式使用它,所以我不能确定它是否会按预期工作。

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

于 2013-06-03T18:45:32.297 回答
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();
             }
        });
    }
}
于 2013-06-08T14:51:56.370 回答