当我在精灵上触摸手指时,得分随机增加而不是固定率我意味着我设定得分 每次增加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
答案 0 :(得分:1)
您可以使用SurfaceScrollDetector,它可以检测用户何时在屏幕上滑动手指。它有以下与之相关的事件:
我猜你到达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();
}
});
}
}