Queue multiple entity modifiers in AndEngine
Estoy tratando de tener un sprite ("puntero" abajo) a lo largo de dos caminos, uno tras otro. Aquí está mi código:
scene.attachChild(pointer); pointer.clearEntityModifiers(); pointer.registerEntityModifier(new MoveModifier( 1.0f, 540, 960, 1000, 1000, new IEntityModifierListener() { public void onModifierStarted(IModifier<IEntity> pModifier, IEntity pItem) {} public void onModifierFinished(IModifier<IEntity> pModifier, IEntity pItem) { clickSound.play(); pointer.clearEntityModifiers(); pointer.registerEntityModifier(new MoveModifier( 1.0f, pointer.getX(), pointer.getY(), 500, 2500, new IEntityModifierListener() { public void onModifierStarted(IModifier<IEntity> pModifier, IEntity pItem) {} public void onModifierFinished(IModifier<IEntity> pModifier, IEntity pItem) { pointer.clearEntityModifiers(); pointer.detachSelf(); } }, EaseCubicInOut.getInstance() )); } }, EaseCubicInOut.getInstance() ));
El puntero se mueve a lo largo de la primera ruta como se esperaba y, a continuación, se reproduce el clickSound y, a continuación, no pasa nada. El segundo MoveModifier no tiene ningún efecto. ¿Qué estoy haciendo mal aquí?
- ¿Cómo obtener una captura de pantalla en doble resolución?
- Sprite tamaño en el tamaño de pantalla diferente Andengine Android
- ¿Dónde está la documentación para "AndEngine"?
- Andengine fade in / out y modificadores alfa no funcionan
- Servicios de Google Play no disponibles debido al error 2
- Botón de pausa de Andengine en pantalla
- ¿Hacer saltar un sprite cuando el usuario teclea en la pantalla?
- Problema con la orientación de la pantalla de Android
- Puerto Andengine juego a otra plataforma?
- Cambiar el valor de la variable de otra clase
- Andengine FPS bajo en ciertos teléfonos
- Java.lang.IndexOutOfBoundsException: El índice no válido 13, el tamaño es 13
- Cómo girar una sinusoide en el eje
No estoy seguro de por qué su código no funciona, pero creo que puede lograr lo mismo utilizando el SequenceEntityModifier
:
scene.attachChild(pointer); pointer.clearEntityModifiers(); pointer.registerEntityModifier(new SequenceEntityModifier( new MoveModifier#1(...), new MoveModifier#2(...)));
Mi primera conjetura woud ser, que el código después de pointer.clearEntityModifiers();
ya no se ejecuta, ya que anula el registro de los modificadores. Sólo estoy pensando en voz alta aquí, así que por favor dime si estoy equivocado. Tal vez usted puede intentar registrar algo para ver si el método vuelve después de esta línea. Algo como:
pointer.clearEntityModifiers(); Log.v("EntityModifier", "the method continues...");
Siempre me resulta difícil administrar las definiciones de clases internas, debido al estado de las variables a las que se accede desde dentro. Como en su caso el pointer
. Si nada funciona, todavía puede intentar hacerlo todo en una sola corrida. Así que en lugar de deshacerse del primer modificador de oyentes y registrar otro, cree su propio Oyente, con una bandera en algún lugar para decirle qué hacer y reutilizar ese oyente:
public class MyModifierListener extends IEntityModifierListener{ private Pointer pointer; // declare your pointer, so you have a reference within the listener private boolean firstRun; // a flag to check if it is the first time the modifier is used public MyModifierListener(Pointer pointer){ super(); this.pointer = pointer; // init the pointer within the constructor this.firstRun = true; // should be true the first time } public void onModifierStarted(IModifier<IEntity> pModifier, IEntity pItem) { } public void onModifierFinished(IModifier<IEntity> pModifier, IEntity pItem) { if(firstRun){ clickSound.play(); firstRun=false; pointer.registerEntityModifier(new MoveModifier(1.0f, pointer.getX(), pointer.getY(), 500, 2500, this), EaseCubicInOut.getInstance()); }else{ pointer.detachSelf(); } } }
Y para usarlo algo así:
MyModifierListener myListener = new MyModifierListener(pointer); pointer.registerEntityModifier(new MoveModifier(1.0f, 540, 960, 1000, 1000, myListener), EaseCubicInOut.getInstance());
No pude probar esto, así que estas son sólo conjeturas salvajes. Dime si encuentras algo.
respecto a Christoph