¿Hacer un salto de sprite cuando el usuario toca la pantalla?
Pregunta
Estoy usando un motor para implementar un sprite que se pueda arrastrar por la pantalla usando esto.
Entonces, lo que quiero hacer es que cuando el usuario toque cualquier parte de la pantalla, el sprite saltará.
o sube y luego baja.
¿Cuál es la mejor manera de hacer esto con un motor?
Solución
Esto debería funcionar:
@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;
}
Tenga en cuenta que, si va a utilizar esto, siempre que haya un evento ACTION_DOWN
, es posible que se pierda otros controladores de eventos para esto (por ejemplo, si tiene botones en pantalla, nunca controlarán el evento).
La forma de manejarlo es usar agregar cualquier otra entidad que desee para recibir eventos táctiles como áreas táctiles para su escena, Scene.registerTouchArea(ITouchArea)
lo hace.Sprite
s y AnimatedSprite
s implementan ITouchArea
, por lo que puede utilizarlos.
Cuando un Scene
recibe un TouchEvent
para manejar, primero dejará que todos los ITouchArea
que hayas registrado lo manejen, luego, si ninguno de ellos lo consumió, probará el método onSceneTouchEvenet
.
Otros consejos
Parece que tendría que configurar un oyente que se muestra en este tutorial: http://www.andengine.org/forums/tutorials/updating-sprites-objects-listeners-t386.html y luego quizás use un modificador de movimiento como se muestra en esta publicación: cómo mover un objeto sprite usando AndEngine (Android) Espero que resuelva su problema.;)
Buena suerte: Lijap