Это должно работать:
@Override
public boolean onSceneTouchEvent(Scene pScene, TouchEvent pSceneTouchEvent) {
if(pSceneTouchEvent.isActionDown()) { //Jump only if the user tapped, not moved his finger or something
final Entity playerEntity = ...;//Get player entity here.
final float jumpDuration = 2;
final float startX = playerEntity.getX();
final float jumpHeight = 100;
final MoveYModifier moveUpModifier = new MoveYModifier(jumpDuration / 2, startX, startX - jumpHeight); // - since we want the sprite to go up.
final MoveYModifier moveDownModifier = new MoveYModifier(jumpDuration / 2, startX + jumpHeight, startX);
final SequenceEntityModifier modifier = new SequenceEntityModifier(moveUpModifier, moveDownModifier);
playerEntity.registerEntityModifier(modifier);
return true;
}
return false;
}
Имейте в виду, что, если вы будете использовать это, когда есть событие ACTION_DOWN
, вы можете пропустить некоторые другие обработчики событий для этого (например, если у вас есть экранные кнопки, они никогда не будут обрабатывать событие ).
Способ справиться с этим - добавить любые другие объекты, которые вы хотите получать сенсорные события, в качестве областей касания для вашей сцены, Scene.registerTouchArea(ITouchArea)
делает это. Sprite
s и AnimatedSprite
s реализуют ITouchArea
, так что вы можете использовать их.
Когда Scene
получает TouchEvent
для обработки, он сначала позволяет всем зарегистрированным ITouchArea
обработать его, затем, если ни один из них не использовал его, он попытается использовать метод onSceneTouchEvenet
.