Question

Je l'ai fait tâtonnement pendant des heures maintenant et je n'ai pas encore trouvé une solution pour quelque chose qui semble simple .... J'utilise le

public void onConfigurationChanged(Configuration newConfig)
méthode

pour détecter si un utilisateur a changé leur orientation de l'écran. Finalement, il est envoyé à cette méthode où les entitys sont attachés à la scène:

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

                }
            }

}

Cette méthode est appelée lorsque le papier peint est créé, et aussi lorsqu'un utilisateur change d'orientation de l'écran.

Je l'ai testé sur mon téléphone et il affiche correctement les messages du journal lorsque je passe des orientations, ce qui signifie qu'il fait ce que je veux faire.

Le problème -

L'enfant sprite ne se détache pas lorsque cette méthode est appelée à. Si je suis en mode Portrait, et passer à paysage, les restes de sprite portrait et je voudrais le faire disparaître, et vice versa.

Je serais très heureux si quelqu'un pouvait répondre à cela, j'ai eu un mal de tête sur ce pendant probablement 20 heures.

Était-ce utile?

La solution

Il semble que le problème est peut-être logique. Vous réattribuer le SpriteDayPortrait et SpriteDayLanscape avant d'appeler la branche à leur détachement ou de les attacher

Donc, chaque fois que le script Détacher est appelé fait référence à une nouveau instance de l'image-objet, plutôt que l'ancienne instance que vous voulez Détacher.

essayez de déplacer l'affectation des sprites dans une autre fonction qui est appelée uniquement lorsque la scène est créée:

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

Autres conseils

Gardez à l'esprit que, depuis le changement d'orientation dans AndEngine n'existe pas (Vous n'êtes pas autorisé à changer l'orientation du moteur), vous should't rendre votre jeu soit en utilisant les changements d'orientation (Ce serait bizarre pour l'utilisateur).

Quoi qu'il en soit, onConfigurationChanged est appelé à partir du thread d'interface utilisateur, et vous ne devriez pas manipuler des objets de AndEngine mais dans le UpdateThread. Il peut causer des problèmes (Cependant, si elle serait, votre jeu plantait) il changer.

Je pense que cela se produit parce que vous ne désactivez pas votre ParallaxBackground avant de définir le nouveau fond (peut-être les vieilles peaux de fond le nouveau?) Gardez une référence à votre dernière ParallaxEntity puis retirez-le de l'arrière-plan avant d'ajouter un nouveau.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top