Question

Je suis nouveau à Android et à développer un petit jeu basé sur AndEngine (www.andengine.org).

Le jeu affiche une carte en mosaïque pour l'arrière-plan, avec différents types de tuiles (certains mobiles, certains tournants). Je dessine aussi des lignes sur l'écran.

Le problème est, lorsque le jeu tourne première fois (en cours d'exécution sur le téléphone, a commencé à partir Eclipse) il fonctionne parfaitement mais si je quitte le jeu en utilisant la touche BACK du téléphone et redémarrez le jeu du téléphone homescreen icône de l'application est très bogué . Les lignes n'apparaissent sur l'écran et la fonctionnalité des œuvres en mouvement et tuiles en rotation une seule fois alors le jeu est non opérationnel. Il ne tombe pas en panne, mais les bugs causés par le jeu redémarrage rendent inutile.

J'ai lu tout ce que je peux trouver sur le cycle de vie de l'application et la mise en divers objets à zéro dans la méthode OnDestroy (), mais rien que je ne ai essayé a fait une différence. Quelque chose est clairement « traîner » de la première exécution de l'application et causer des problèmes lors de son démarrage une deuxième fois. S'il vous plaît aide, 24 heures de recherche sur Google et wracking mon cerveau a été stérile.

Merci, Steve

P.S. Même comportement lorsqu'il est exécuté dans l'émulateur.

Mise à jour:

J'enquêté sur mon autre code:

Je créé un petit programme pour enquêter sur une partie de la question ci-dessus, tracer une ligne et ne pas en cours d'élaboration sur la répétition de l'application.

L'utilisation d'un AndEngine doit avoir priorité onLoadScene (). Dans cette méthode, vous indiquez ce que vous voulez sur l'écran au démarrage et la méthode retourne un objet de scène. A poignées de scène ce que vous voyez à l'écran, donc si vous voulez dire, ajouter une nouvelle ligne (ou sprite, ou autre) à l'écran, vous appelez myScene.addEntity (myLine). J'ai créé une classe d'activité principale et une classe appelée MyLine qui trace la ligne.

Mon activité principale:

public class LineTest extends BaseGameActivity {

@Override
    public Scene onLoadScene() {
        scene = new Scene(1);
        myLine = new MyLine();
        myLine.displayLine();   
        return scene;
    }
}

La classe MyLine:

public class MyLine {

    static final Scene SCENE = LineTest.scene;
    static final int LINE_WIDTH = 4;

    Line line = new Line(0,0,0,0);

    public MyLine() {
    }

    public void displayLine() {
        line.setLineWidth(4);
        line.setColor(1f, 0f, 0f);
        line.setPosition(10, 10, 400, 400);
        SCENE.getBottomLayer().addEntity(line); 
    } 

    public void removeLine() {
        SCENE.getBottomLayer().removeEntity(line);
    }
}

Vous remarquerez peut-être un problème avec ce qui précède, dans ma défense, je suis nouveau à Java et POO. Mon activité utilise une seule scène, donc je pensais, dans ma classe MyLine, je pourrais déclarer SCENE comme une finale statique car il ne changera pas. FAUX! Débogage le programme que je trouve que la scène finale statique une fois réglée, ne change jamais, même après que le programme a été arrêté (en utilisant la clé arrière) et remis en marche. Cependant, lorsque le programme redémarre la scène de la scène de code = nouvelle scène (1); crée une nouvelle scène avec un nouvel ID, de sorte que les points de scène finale statiques à l'ancienne scène pas la nouvelle une, donc pas de ligne est créé dans la nouvelle scène.

J'ai trouvé que deux options fonctionnent pour résoudre ceci:

Soit:

Scene SCENE = LineTest.scene;

Ou:

static Scene SCENE;

Et dans le constructeur:

    SCENE = LineTest.scene; //I could also pass scene as param to 
constructor which may be better OOP practice.

Je soupçonne que mes autres problèmes avec mon application de jeu sont tous liés à déclarer des choses comme finales statiques ou quand ils ne devraient pas être.

Y at-il une règle que je peux utiliser pour décider quelles sont les variables de type (et méthodes) devraient être?

Mise à jour: J'ai eu trois variables dans ma classe de jeu déclarée finale statique quand ils auraient dû être tout simplement statique. les changer à l'électricité statique et de les affecter dans le constructeur a résolu tous les problèmes, Woohoo! {: -)

Était-ce utile?

La solution

Pourquoi avez-vous même un champ statique dans votre classe quand elle est en particulier à l'instance? Faites-une variable d'instance ou ainsi.

Vous pouvez également réinitialiser tous les champs statiques manuellement lorsque l'application s'ouvre, mais ce serait très laid.

Autres conseils

  

Quelque chose est clairement « traîner » de la première exécution de l'application et causer des problèmes lors de son démarrage une deuxième fois.

Avez-vous créé votre propre sous-classe d'application? Si vous faites une initialisation du jeu au niveau de l'application et d'autres initialisations au niveau d'activité, puis répéter l'ancienne coutume jusqu'à ce que l'application elle-même est tué et redémarré. Il suffit de sortir de l'aide de la touche BACK ne tue pas l'application directement.

Soyez prudent avec l'utilisation de variables statiques finales !!! Solution à mes problèmes ci-dessus.

J'ai rencontré ce problème aussi, et je le résoudre en supprimer certaines variables statiques et méthode statique. Je sais que la variable statique reste en mémoire lorsque cliquez sur le bouton retour dans Android, mais je ne sais toujours pas pourquoi l'effet si étrange. Merci aussi tout le monde ci-dessus!

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