Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java ME (J2ME) > Out of Memory


Автор: darkvivi 16.6.2009, 12:33
 Для написания игры мне требуется много  массивов и много ячек в каждом из массивов. Если я делаю их слишком много, то игра выдаёт  Out of memory. Как сохранить память? (а если я делаю методы, это сохраняет память? т.е. не пишу в update(), а создаю собственный метод и ссылаюсь на него). Как лучше всего создавать большие массивы для сохранения памяти??
          Спасибо smile 

Автор: Skynin 16.6.2009, 17:26
Если память занята - то она занята.
Большие массивы лучше не создавать, а оптимизировать алгоритмы работы, и когда нужны будут - маленькие по занимаемой памяти массивы. Хитростей оптимизации много - можно поучиться по книжке "Алгоритмы. Построение и анализ" Т. Кормен, Ч. Лейзер
В самом крайнем случае можно сохранять массив в RMS а работать только с нужной частью. Тогда, правда, оптимизировать придется еще мудреней, потому что чтение/запись в RMS ну очень медленная.

фразы - а если я делаю методы, это сохраняет память? т.е. не пишу в update(), а создаю собственный метод и ссылаюсь на него - не понял.

Автор: math64 16.6.2009, 22:17
Если для хранения значений достаточно short или byte - используйте их вместо int.
Вместо двух- или трёхмерного массива можно использовать линейный и написать метод доступа.
Если в массиве много нулей, его нужно как-то запаковать.

Автор: darkvivi 17.6.2009, 16:13
 Short или byte? Сейчас попробую. А как быть со Sprite[]?

Автор: Skynin 17.6.2009, 17:11
Цитата

А как быть со Sprite[]?

Уменьшать размер объектов класса Sprite. Если Sprite - это класс хранящий кадр-картинку, то может заменить скажем 8 Sprite на один FrameSprite8 - в котором будет хранится первоначальная картинка, а остальные кадры - изменения к ней, (или к предыдущей картинке)
Выгружать спрайты из памяти, если не видны.

и т.д.

Автор: math64 18.6.2009, 19:52
Не пользуйся Game Builder из NetBeans или т.п. (или делай свой), Game Builder все данные сохраняет в массивах, инициализируемых в коде класса, а значит все эти массивы будут загружены в память, даже если они не нужны.
Картинки для спрайтов - в одном PNG, а нужный спрайт можно когда нужно создать из Image.
Но для экономии памяти можно спрайтами не пользоваться.

Автор: darkvivi 18.6.2009, 22:08
 А чем лучше пользоваться?

Автор: math64 18.6.2009, 22:28
Читай Любавин С.А. - Программирование игр для сотовых телефонов на J2ME.
Кстати, Game Builder'ом можно воспользоваться для того чтобы отредактировать игровое поле, посмотреть как движутся спрайты.
Но итоговую программу создавать в другом проекте. Сгенерированные Game Builder'ом массивы преобразовать в двоичные файлы ресурсов и включить в новый проект.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)