Domanda

Faccio prove ed errori da ore ormai e non ho ancora trovato una soluzione per qualcosa che sembra semplice ... Sto usando

public void onConfigurationChanged(Configuration newConfig)

metodo per rilevare se un utente ha cambiato l'orientamento dello schermo. Alla fine, viene inviato a questo metodo in cui le entità sono allegate alla scena:

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);

                }
            }

}

Questo metodo viene chiamato quando lo sfondo viene creato per la prima volta e anche quando un utente cambia l'orientamento dello schermo.

L'ho testato sul mio telefono e visualizza correttamente i messaggi di registro quando cambio orientamento, il che significa che sta facendo quello che voglio che faccia.

Il problema ...

Lo sprite figlio non si scollega quando viene chiamato questo metodo.Se sono in modalità Ritratto e passo a Paesaggio, lo sprite del ritratto rimane e vorrei che scomparisse, e viceversa.

Sarei estremamente felice se qualcuno potesse rispondere a questa domanda. Ho un mal di testa per questo probabilmente da 20 ore.

È stato utile?

Soluzione

Sembra che il problema potrebbe essere logico: riassegni SpriteDayPortrait e SpriteDayLanscape prima di chiamare il ramo per scollegarli o collegarli.

Quindi, ogni volta che lo script detach viene chiamato, si riferisce a una nuova istanza dello sprite, piuttosto che alla vecchia istanza che desideri scollegare.

prova a spostare l'assegnazione degli sprite in un'altra funzione che viene chiamata solo quando viene creata la scena:

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

Altri suggerimenti

Tieni presente che poiché la modifica dell'orientamento in AndEngine non esiste (non sei autorizzato a cambiare l'orientamento del motore), non dovresti fare in modo che il tuo gioco utilizzi le modifiche dell'orientamento (sarebbe strano per l'utente).

In ogni caso, onConfigurationChanged viene chiamato dal thread dell'interfaccia utente e non dovresti manipolare gli oggetti di AndEngine ma nell'UpdateThread.Potrebbe causare alcuni problemi (tuttavia, se lo facesse, il tuo gioco andrebbe in crash) quindi cambialo.

Penso che accada perché non hai cancellato il tuo ParallaxBackground prima di impostare il nuovo sfondo (forse il vecchio sfondo nasconde quello nuovo?) Mantieni un riferimento al tuo ultimo ParallaxEntity, quindi rimuovilo dallo sfondo prima di aggiungerne uno nuovo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top