Pregunta

Llevo horas haciendo prueba y error y todavía no encuentro una solución a algo que parece sencillo....estoy usando el

public void onConfigurationChanged(Configuration newConfig)

Método para detectar si un usuario ha cambiado la orientación de su pantalla.Finalmente, se envía a este método donde las entidades se adjuntan a la escena:

public void BuildScene(final Scene scene){

       // Destroys current scene.
            scene.detachChildren();

        this.SpriteDayPortrait = new Sprite(-200, 0, 2000, 500, this.mParallaxLayerDayPortrait);
        this.SpriteDayLandscape = new Sprite(0, 0, 750, 500, this.mParallaxLayerDayLandscape);

    if (prefs.getString("frontImage", "1").equals("3"))
            {
                //Day
                if (orientationValue.equals("PORTRAIT"))
                {
                    Log.d("Orientation", "Portrait");
                    scene.detachChild(SpriteDayLandscape);

                    scene.attachChild(SpriteDayPortrait);

                }
                else if (orientationValue.equals("LANDSCAPE"))
                {
                    Log.d("Orientation", "Landscape");
                    scene.detachChild(SpriteDayPortrait);

                    scene.attachChild(SpriteDayLandscape);

                }
            }

}

Se llama a este método cuando se crea el fondo de pantalla por primera vez y también cuando un usuario cambia la orientación de la pantalla.

Probé esto en mi teléfono y muestra correctamente los mensajes de registro cuando cambio de orientación, lo que significa que está haciendo lo que quiero que haga.

El problema--

El niño sprite no se desconecta cuando se llama a este método.Si estoy en modo Retrato y cambio a Paisaje, el objeto del retrato permanece y me gustaría que desaparezca, y viceversa.

Estaría muy feliz si alguien pudiera responder esto. He estado teniendo dolor de cabeza por esto durante probablemente 20 horas.

¿Fue útil?

Solución

Parece que el problema podría ser lógico: reasigna SpriteDayPortrait y SpriteDayLanscape antes de llamar a la rama para separarlos o adjuntarlos.

Por lo tanto, cada vez que se llama al script de separación, se hace referencia a una instancia nueva del objeto, en lugar de la instancia anterior que desea separar.

intente mover la asignación de los sprites a otra función que solo se llame cuando se crea la escena:

// Move this
this.SpriteDayPortrait = new Sprite(-200, 0, 2000, 500, this.mParallaxLayerDayPortrait);
        this.SpriteDayLandscape = new Sprite(0, 0, 750, 500, this.mParallaxLayerDayLandscape);

Otros consejos

Tenga en cuenta que, dado que no existe el cambio de orientación en AndEngine (no puede cambiar la orientación del motor), no debe hacer que su juego utilice cambios de orientación (eso sería extraño para el usuario).

De todos modos, onConfigurationChanged se llama desde el subproceso de la interfaz de usuario y no debe manipular objetos de AndEngine sino en UpdateThread.Podría causar algunos problemas (sin embargo, si fuera así, tu juego fallaría), así que cámbialo.

Creo que sucede porque no limpiaste tu ParallaxBackground Antes de establecer el nuevo fondo (¿tal vez el fondo antiguo oculta el nuevo?) Mantenga una referencia a su última ParallaxEntity luego elimínelo del fondo antes de agregar uno nuevo.

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