Pregunta

Quiero crear un botón de pausa en la pantalla en AndEngine

Lo que hago ahora es agregar un sprite y cuando lo toco, hago motor.stop (), el problema con esto, es que el motor no maneja más touchevents hasta que reanudo el juego (ahora uso el botón de menú para Esto), entonces, ¿hay alguna manera de lograrlo?

¡Gracias!

¿Fue útil?

Solución 2

Encontré que la mejor manera de hacerlo es crear una escena, y cuando se detiene, anule el OnManedApdate de esta manera

@Override
onManagedUpdate(float pSecondsElapsed){
 if(mPaused) super.onManagedUpdate(0);
 else        super.onManagedUpdate(pSecondsElapsed);
}

De esta manera, todo funciona perfectamente, y puedes hacerlo en una capa de juego y actualizar la capa de menú como de costumbre,

Otros consejos

Mire los ejemplos de AndEngine, hay un proyecto que muestra el uso de menús en AndEngine, encontrará una mejor manera de implementar un menú que no sea detener el motor. ¡Buena suerte!

Puede hacer el botón de pausa en la pantalla con bastante facilidad. Lo que debe hacer es crear un botón de pausa en cualquier lugar en la pantalla, al tocar ese botón, mostrar un botón de reproducción sobre el botón de pausa original. Puede usar .SetPosition () para menuitem si comenta el código .Buildanimations () del ejemplo de Pausemenu.

Para demostrar la idea, he hecho una actividad simple para mostrar su posible. Eche un vistazo e intente por usted mismo.

Enlace: https://github.com/reittes/on-screen-pause-button

Buena suerte

Lo que haría es agregar un booleano "pausado" en su archivo y luego hacer que el botón lo establezca en verdad if (!pause) {...} Bloquee para que deje de actualizar cuando se detenga. No es la solución más elegante, pero funcionó en mi juego y no causó problemas de rendimiento en la impaudación.

Código PSEDU

@Override
public boolean onKeyDown(final int pKeyCode, final KeyEvent pEvent) {
    if (pKeyCode == KeyEvent.KEYCODE_MENU && pEvent.getAction() == KeyEvent.ACTION_DOWN) {
        if (this.mEngine.isRunning()) {
            gSceneGlobal.setChildScene(this.mGamePauseScene, false, true, true);
            this.mEngine.stop();
        } else {
            gSceneGlobal.clearChildScene();
            this.mEngine.start();
        }
        return true;
    } else {
        return super.onKeyDown(pKeyCode, pEvent);
    }
}

Creo mi clase (MyEngine extiende el motor) y cambia

@Override
public boolean onTouch(final View pView, final MotionEvent pSurfaceMotionEvent) {                      
if(!isRunning()) {
  // add your code for engine.stop();
  }
}

y crear MyEngine Engine en la clase de juego;

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top