Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Частое переключение крэшит игру - Программирование Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android Обработка ImageView http://www.cyberforum.ru/android-dev/thread1344257.html
Такая проблемка ,есть ImageView при нажатии на imageview должен поменяться фон ,создал папку drawable в него поместил icon.xml в нем <?xml version="1.0" encoding="utf-8"?> <selector...
Программирование Android Система координат акселерометра планшета и телефона Всех с наступающим!!! Была задача, простая до скрежета зубов: импортирую import android.hardware.SensorEvent; далее просто метод, считывающий значения от SensorEvent public void... http://www.cyberforum.ru/android-dev/thread1343953.html
ООП подмена статик функции в наследнике Программирование Android
Гуру ООП явы, помогите! Есть класс сервиса. В нем есть статик "запускатель" Start. В этом запускателе вызывается другая статик функция с параметром parm. Создаю наследника. Хочу оставить Start,...
Программирование Android Панель контекстных действий без множественного выделения
Возможно ли создать панель контекстных действий для ListView без множественного выделения? В примерах панель контекстных действий создаётся добавлением слушетеля через...
Программирование Android Backend Сервер для андроид приложений http://www.cyberforum.ru/android-dev/thread1342977.html
нужно построить сервер для обработки запросов с Андроид приложений. Запрос состоит из текста. Сервер должен парсировать текст и в соответствии с базой данных вернуть ответ. на чем лучше писать...
Программирование Android Android studio emulator error HAXM Здравствуйте. Помогите разобраться с эмулятором в андроид студио. Перерыл интернет и на русском, и на английском не получается ничего. Компьютер процессор AMD Fx(tm) - 4350 Quad Core 4.2, видеокарта... подробнее

Показать сообщение отдельно
bpv_xquest
0 / 0 / 0
Регистрация: 24.12.2014
Сообщений: 5

Частое переключение крэшит игру - Программирование Android

29.12.2014, 22:12. Просмотров 248. Ответов 0
Метки (Все метки)

Забавы ради я пилю маленькую игрушку под Android, для графики пользуюсь Open GL ES 1. Для удобства обработки текстур у меня есть пара методов, инкапсулирующих необходимые действия Open GL. Вот они:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
public void load() {
    GL10 gl = glGraphics.getGL();
    int[] textureIds = new int[1];
    gl.glGenTextures(1, textureIds, 0);
    textureId = textureIds[0];
    InputStream in = null;
    try {
        in = fileIO.readAsset(fileName);
        Bitmap bitmap = BitmapFactory.decodeStream(in);
        gl.glBindTexture(GL10.GL_TEXTURE_2D, textureId);
        GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);
        gl.glBindTexture(GL10.GL_TEXTURE_2D, 0);
        bitmap.recycle();
    }
    catch(IOException e) {
        throw new RuntimeException("Couldn't load texture '" + fileName + "'", e);
    }
    finally
    {
        if(in != null)
        {
            try {
                in.close();
            }
            catch (IOException e) { }
        }
    }
}
 
public void reload() {
    load();
    setFilters(minFilter, magFilter);
    glGraphics.getGL().glBindTexture(GL10.GL_TEXTURE_2D, 0);
}
 
public void setFilters(int minFilter, int magFilter) {
    this.minFilter = minFilter;
    this.magFilter = magFilter;
}
 
public void bind() {
    GL10 gl = glGraphics.getGL();
    gl.glBindTexture(GL10.GL_TEXTURE_2D, textureId);
    gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, minFilter);
    gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, magFilter);
}
 
public void dispose() {
    GL10 gl = glGraphics.getGL();
    gl.glBindTexture(GL10.GL_TEXTURE_2D, 0);
    int[] textureIds = { textureId };
    gl.glDeleteTextures(1, textureIds, 0);
}
Работа с текстурным атласом начинается с создания экземпляра класса, содержащего эти методы, и вызова load(). Перед отрисовкой спрайтов с текстурами вызывается bind(). Когда есть вероятность потери контекста, я вызываю reload(). Метод dispose() хоронит атлас.

В игре постоянно используются 2 атласа 1136 x 640. Один из них загружается 1 раз и навсегда. А вот другой иногда подменяется аналогичным, но выполненным в других цветах. Происходит это при рестарте уровня, выбор новой раскраски делается рандомно.

Проблема заключается в том, что если юзер часто делает рестарт уровня (насколько часто возможно делать комбо вызов меню + кнопка рестарта + ОК), то раз через 5 уровень начинает грузиться заметно медленнее и медленнее, а потом игра крэшится. Метод dispose() срабатывает вовремя, метод finalize() для класса срабатывает вовремя. И я уже несколько дней ума не приложу в чём может быть проблема. Буду рад, если у кого-то есть дельные мысли.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru