Pregunta

Soy nuevo en Android y el desarrollo de un pequeño juego basado en AndEngine (www.andengine.org).

El juego muestra un mapa de azulejos para el fondo, con diferentes tipos de baldosas (algunos móviles, algunos giratorios). También dibujo algunas líneas en la pantalla.

El problema es que cuando el juego se ejecuta por primera vez (que se ejecuta en el teléfono, comenzado desde Eclipse) se ejecuta sin problemas, pero si salgo del juego usando el botón atrás del teléfono y reiniciar el juego desde la pantalla de inicio del teléfono icono de la aplicación es muy verde . Las líneas ya no aparecen en la pantalla y la funcionalidad de mover y rotar azulejos funciona sólo una vez y luego el juego no está operativo. No dormir, pero los errores causados ??por el juego reiniciar hacen que sea inútil.

He leído todo lo que puedo encontrar en el ciclo de vida de aplicaciones y tratado de establecer varios objetos a cero en el método OnDestroy () pero nada que hago ha hecho ninguna diferencia. Algo es claramente 'rondando' de la primera ejecución de aplicaciones y causando problemas cuando se inicia una segunda vez. Por favor, ayuda, 24 horas después de buscar en Google y arruina mi cerebro ha sido infructuosa.

Gracias, Steve

P.S. Mismo comportamiento cuando se ejecuta en el emulador.

ACTUALIZACIÓN:

Me investigó mi código adicional:

He creado un pequeño programa para investigar parte del problema anterior, trazar una línea y no se dibuja en la repetición de la aplicación.

Uso AndEngine uno debe invalidar onLoadScene (). En este método se especifica lo que quiere en la pantalla en el arranque y el método devuelve un objeto de la escena. A asas Ambiente de lo que se ve en la pantalla, por lo que si usted quiere decir, añadir una nueva línea (o sprite, o lo que sea) a la pantalla, se llama a myScene.addEntity (myline). He creado una clase de actividad y una llamada myline clase que traza la línea.

Mi actividad principal:

public class LineTest extends BaseGameActivity {

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

La clase 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);
    }
}

Usted puede notar un problema con lo anterior, en mi defensa Soy nuevo en Java y programación orientada a objetos. Mi actividad utiliza sólo una escena, así que pensé, dentro de mi clase myline, podría declarar la escena como un static final, ya que no va a cambiar. ¡INCORRECTO! Probar el programa me encontré con que la escena final estática una vez establecido, no cambia nunca, incluso después de que el programa se ha detenido (con llave) y reiniciado. Sin embargo, cuando el programa se reinicia la escena Escena código = nueva escena (1); crea una nueva escena con una nueva identificación, por lo que la escena final puntos estáticos a la vieja escena no la nueva, por lo tanto, hay una línea que se crea en el nuevo escenario.

Me encontró que dos opciones funcionan para resolver esto:

O bien:

Scene SCENE = LineTest.scene;

O:

static Scene SCENE;

Y en el constructor:

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

Sospecho que mis otros problemas con mi aplicación de juego están todos relacionados con declarar cosas como estática o static final cuando no deberían ser.

¿Hay una regla de oro que pueda usar la hora de decidir cuáles deben ser variables de tipo (y métodos)?

ACTUALIZACIÓN: Tenía tres variables en mi clase de juegos declarado como static final cuando deberían haber sido sólo estática. Cambiándolos a estática y su asignación en el constructor ha resuelto todos los problemas, Woohoo! {: -)

¿Fue útil?

Solución

¿Por qué tienes un campo estático en su clase cuando es específica a la instancia? Que sea una variable de instancia o menos.

También podría restablecer todos los campos estáticos manualmente cuando se abre la aplicación, pero que sería muy fea.

Otros consejos

  

Algo es claramente 'rondando' de la primera ejecución de aplicaciones y causando problemas cuando se inicia una segunda vez.

¿Ha creado su propia subclase de aplicaciones? Si usted está haciendo algún inicialización del juego a nivel de aplicación y luego otra inicialización en el nivel de actividad, a continuación, la antigua costumbre se repite hasta que la propia aplicación se mata y se reinicia. Basta con salir con el botón Atrás no matar a la aplicación directamente.

Tenga cuidado con el uso de las variables static final !!! Solución a mis problemas anteriormente.

I se reunió este problema también, y resolverlo por eliminar algunas variables estáticas y método estático. Sé que la variable estática se quedará en la memoria cuando se haga clic en el botón Atrás en el androide, pero todavía no sé por qué el efecto tan extraño. También gracias a todos por encima de!

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