С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
bpv_xquest
0 / 0 / 0
Регистрация: 24.12.2014
Сообщений: 5
#1

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

29.12.2014, 22:12. Просмотров 253. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.12.2014, 22:12
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Частое переключение крэшит игру (Программирование Android):

Самое частое слово - Python
Дан текст: в первой строке задано число строк, далее идут сами строки. Выведите слово, которое в этом тексте встречается чаще всего. Если...

Самое частое число - C++ Builder
Всем доброго времени суток. Есть массив случайных чисел, нужно найти самое часто повторяющееся число в этом массиве. Можно пойти по самому...

Частое отключение интернета - Windows XP
Здравствуйте. Проблема - отключается интернет каждые 5-10 минут (локалка остаётся в порядке), восстанавливается сам. Интернет через...

Частое проигрывание звука тормозит - C++ Builder
Проигрываю звук этой функцией очень часто, но это затормаживает программу. Можно ли проигрывать звук так, чтобы это вообще не тормозило...

слишком частое обновление холста - C#
было необходимо нарисовать некоторые детали на холсте канвы с помощью Graphics G = drw.CreateGraphics(); drw -стандартный элемент-...

Самое частое слово в файле - Python
Текстовый файл состоит из слов, записанных строчными буквами латинского алфавита, разделенных пробелами. Иных символов, кроме букв,...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.12.2014, 22:12
Привет! Вот еще темы с ответами:

Можно ли оптимизировать частое обращение к БД - C#
Всем доброго времени суток. Вообщем я решил создать форму авторизации используя mySql и как бы шло все нормально но при попытке как то...

Максимально частое обновление экрана - C++
Вечер добрый! Появилась необходимость использовать SDL2 и OpenGL под Виндой. Я настроил MinGW - всё нормально работает. Взял первый...

WinForms: частое обновление картинки - C#
Немного глуповатый вопрос, но все же сам видимо не решу, или решу нескоро. Пишу лабу (хехе :) ), нужно написать простую программку,...

синий экран частое появление - BSOD
мучает синий экран при игре и так если даже не играешь вот:051813-28080-01.dmp 18.05.2013...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.