| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java ME (J2ME) > Out of Memory |
| Автор: darkvivi 16.6.2009, 12:33 |
| Для написания игры мне требуется много массивов и много ячек в каждом из массивов. Если я делаю их слишком много, то игра выдаёт Out of memory. Как сохранить память? (а если я делаю методы, это сохраняет память? т.е. не пишу в update(), а создаю собственный метод и ссылаюсь на него). Как лучше всего создавать большие массивы для сохранения памяти?? Спасибо |
| Автор: 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 - это класс хранящий кадр-картинку, то может заменить скажем 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'ом массивы преобразовать в двоичные файлы ресурсов и включить в новый проект. |