Frage

Ich mache jetzt seit Stunden Versuch und Irrtum und habe noch keine Lösung für etwas gefunden, das einfach zu sein scheint ... Ich benutze die

public void onConfigurationChanged(Configuration newConfig)

Methode, um festzustellen, ob ein Benutzer seine Bildschirmausrichtung geändert hat. Schließlich wird es an diese Methode gesendet, bei der die Entitäten an die Szene angehängt werden:

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

                }
            }

}

Diese Methode wird aufgerufen, wenn das Hintergrundbild zum ersten Mal erstellt wird und wenn ein Benutzer die Bildschirmausrichtung ändert.

Ich habe dies auf meinem Telefon getestet und es zeigt erfolgreich die Protokollmeldungen an, wenn ich die Ausrichtung wechsle. Dies bedeutet, dass es das tut, was ich möchte.

Das Problem--

Das Sprite-Kind löst sich nicht, wenn diese Methode aufgerufen wird.Wenn ich mich im Hochformat befinde und zu Querformat wechsle, bleibt das Hochformat-Sprite erhalten und ich möchte, dass es verschwindet und umgekehrt.

Ich würde mich sehr freuen, wenn jemand darauf antworten könnte. Ich habe wahrscheinlich seit 20 Stunden Kopfschmerzen.

War es hilfreich?

Lösung

Es sieht so aus, als ob das Problem logisch sein könnte: Sie weisen SpriteDayPortrait und SpriteDayLanscape neu zu, bevor Sie den Zweig aufrufen, um sie zu trennen oder anzuhängen.

Jedes Mal, wenn das Trennungsskript aufgerufen wird, bezieht es sich auf eine neue Instanz des Sprites und nicht auf die alte Instanz, die Sie trennen möchten.

Versuchen Sie, die Zuordnung der Sprites in eine andere Funktion zu verschieben, die nur beim Erstellen der Szene aufgerufen wird:

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

Andere Tipps

Beachten Sie, dass Sie, da das Ändern der Ausrichtung in AndEngine nicht vorhanden ist (Sie dürfen die Engine-Ausrichtung nicht ändern), Ihr Spiel nicht dazu bringen sollten, Orientierungsänderungen zu verwenden (das wäre für den Benutzer seltsam).

Wie auch immer, onConfigurationChanged wird vom UI-Thread aufgerufen, und Sie sollten keine Objekte von AndEngine, sondern im UpdateThread bearbeiten.Es könnte einige Probleme verursachen (wenn dies jedoch der Fall wäre, würde Ihr Spiel abstürzen), ändern Sie es.

Ich denke, es passiert, weil Sie Ihren ParallaxBackground nicht gelöscht haben, bevor Sie den neuen Hintergrund festgelegt haben (Vielleicht verbirgt der alte Hintergrund den neuen?) Behalten Sie einen Verweis auf Ihren letzten ParallaxEntity bei und entfernen Sie ihn aus dem Hintergrund, bevor Sie einen neuen hinzufügen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top