Я новичок в Android и разрабатываю небольшую игру на основе AndEngine (www.andengine.org).
В игре отображается мозаичная карта для фона с различными типами плиток (некоторые подвижные, некоторыес возможностью поворота).Я также рисую некоторые линии на экране.
Проблема в том, что когда игра запускается впервые (запущена на телефоне, запущена из Eclipse), она запускается без ошибок, но если я выхожу из игры с помощью кнопки НАЗАД телефона и перезагружаюсьВ игре с телефона на рабочем столе значок приложения очень глючит.Линии больше не появляются на экране, а функциональность перемещения и вращения плиток работает только один раз, после чего игра не работает.Он не вылетает, но ошибки, вызванные перезапуском игры, делают его бесполезным.
Я прочитал все, что могу найти в жизненном цикле приложения, и попытался установить для различных объектов значение null в методе onDestroy (), но ничегоЯ сделал что-то изменило.Что-то явно «зависает» с первого запуска приложения и вызывает проблемы при его запуске во второй раз.Помогите, пожалуйста, 24 часа гуглить и ломать мой мозг бесполезно.
Спасибо, Стив
PS То же самое при запуске в эмуляторе.
ОБНОВЛЕНИЕ:
Я исследовал свой код дальше:
Я создал небольшую программу для изучения части вышеупомянутой проблемы, рисуя линию, а она не рисуется при повторном запуске приложения.
При использовании AndEngine необходимо переопределить onLoadScene ().В этом методе вы указываете, что вы хотите на экране при запуске, и метод возвращает объект Scene.Сцена обрабатывает то, что вы видите на экране, поэтому, если вы хотите сказать, добавить новую строку (или спрайт, или что-то еще) на экран, вы вызываете myScene.addEntity (myLine).Я создал основной класс деятельности и класс MyLine, который рисует линию.
Моя основная деятельность:
public class LineTest extends BaseGameActivity {
@Override
public Scene onLoadScene() {
scene = new Scene(1);
myLine = new MyLine();
myLine.displayLine();
return scene;
}
}
Класс 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);
}
}
Вы можетеобратите внимание на проблему с вышесказанным, в свою защиту я новичок в Java и ООП.В моей деятельности используется только одна сцена, поэтому я подумал, что в своем классе MyLine я могу объявить SCENE как статический финал, поскольку он не изменится.НЕПРАВИЛЬНО!Отладка программы Я обнаружил, что статический финальный сценарий, установленный один раз, никогда не меняется, даже после того, как программа была остановлена (с помощью клавиши возврата) и перезапущена.Однако, когда программа перезапускает код Scene scene = new Scene (1);создает новую сцену с новым идентификатором, поэтому статическая конечная сцена указывает на старую сцену, а не на новую, поэтому в новой сцене не создается строка.
Я обнаружил, что для решения этой проблемы работают два параметра:
Либо:
Scene SCENE = LineTest.scene;
Или:
static Scene SCENE;
И в конструкторе:
SCENE = LineTest.scene; //I could also pass scene as param to
constructor which may be better OOP practice.
Я подозреваю другие мои проблемы с моим игровым приложениемвсе они связаны с объявлением вещей как static или static final, когда они не должны быть.
Есть ли эмпирическое правило, которое я могу использовать, решая, какие переменные (и методы) должны быть?
ОБНОВЛЕНИЕ: у меня было три переменные в моем классе Game, объявленные как static final, когда они должны были быть просто static.Изменение их на статическое и назначение их в конструкторе решило все проблемы, WOOHOO!{: -)