Четверг, 25 Апреля 2024, 13:47

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Конструкторы игр и лёгкие в освоении системы разработки игр » Game Maker » Недостаточно ОЗУ игре на GMS 2 (Что делать?)
Недостаточно ОЗУ игре на GMS 2
zzzzzaДата: Четверг, 06 Июля 2017, 14:01 | Сообщение # 1
участник
Сейчас нет на сайте
Всем привет!
Делаю игру в GMS 2.
По мере создания тестировал игру на разных устройствах, в том числе и на "Samsung Galaxy S1 Plus".
Сначала на нем все нормально работало, но по мере увеличения спрайтов стало плохо: сначала просто не отображались некоторые спрайты у объектов, а сейчас он просто выключает игру из-за недостатка озу (на "Galaxy S1 Plus" ее 512 мб.).
Что качается других девайсов, то на "Samsung Galaxy S4" и "ZUK Z1" работает все отлично, но там и ОЗУ в 4 раза больше, как минимум. Единственное, игра начала дольше загружаться. Я так понял, что это из-за того, что загружаются все спрайты в ОЗУ.
Все спрайты разделены на группы: mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi. Сделано это для нормального отображения на всех разрешениях. На каждом устройстве используется нужная группа, все остальные не нужны, поэтому их можно просто не загружать. Почитал и наткнулся на такую функцию "draw_texture_flush()", но она вообще ничего не изменила.

Что можно сделать?

Заранее спасибо!
TLTДата: Четверг, 06 Июля 2017, 14:16 | Сообщение # 2
Сейчас нет на сайте
Нужно оптимизировать:

правильно подметил, что можно сделать простой код на IF разрешение такое-то Then грузится набор спрайтов такой-то.
также нужно уничтожать спрайты, которые выходят за пределы экрана - пуля вылетела и летает себе где-то, сжирая ресурсы;
деактивировать поведение спрайтов за пределами видимой области - противник ходит туда-сюда только если попадает в видимую область экрана;
использовать не одинаковые спрайты, а один и тот же, перемещая оный с неактивной зоны в активную - должна быть умная система спавна противников.


Дао, выраженное словами, не есть истинное Дао.
zzzzzaДата: Четверг, 06 Июля 2017, 15:35 | Сообщение # 3
участник
Сейчас нет на сайте
За пределы комнаты ничего не уходит. Да и не может, в принципе, так как все объекты статичны и для игры нужна только мышка.
Система у меня такая: Есть комната "r_start", которая загружается самой первой. В ней нет ни одного объекта. Есть только код при создание комнаты, в котором определяется разрешение экрана и осуществляется переход в нужную комнату.
Далее комнаты не меняются, просто удаляются ненужные объекты и создаются новые.
В комнате одновременно используется 16 объектов (ПРИМЕРНО). Каждый объект использует 1 спрайт, который содержит 2 изображения.
Если брать сам проект в GMS, то общее количество спрайтов около 400. И я так понимаю, что при запуске игры загружаются все в память.

Структуры очищаю, объекты ненужные удаляю. В чем может быть проблема - не понимаю.

Посмотрел на "ZUK Z1" сколько ОЗУ занимает запущенная игра. Показывает ~6 мб, но максимальная значение - ~1.1 гб. Я так понимаю, что игра занимает столько много ОЗУ при запуске, так как загружает в нее все, но это лишь мое предположение. Такой же вывод можно сделать и из того, что сама игра запускается долго (по сравнению с другими играми. Примерно 2-3 секунды).

Как можно это исправить?
ASH2Дата: Четверг, 06 Июля 2017, 16:58 | Сообщение # 4
участник
Сейчас нет на сайте
zzzzza, Есть предположение, что проблема в большом количестве спрайтов. Попробуй загружать их динамически

Карсон и Питееерс!!!
МорриартеДата: Четверг, 06 Июля 2017, 17:24 | Сообщение # 5
LINUX ФАНАТ
Сейчас нет на сайте
zzzzza, размер текстурных карт пробовали менять? Ну и разделить на группы их нужно так же по их использованию в игре, т.е. те что в меню в одном атласе, те что непосредственно в игре - в другом.
TLTДата: Четверг, 06 Июля 2017, 19:40 | Сообщение # 6
Сейчас нет на сайте
zzzzza, комната и видимый экран при скроллинге/перемещении по комнатам - это разные вещи. Я уже не говорю о том, что нет смысла делать дубли спрайтов, если можно менять их параметры в зависимости от условий разрешения и пр.

Значит, кривые руки (=> плохой код) и непринятие советов (по оптимизации) - это причина проблемы.

В общем, все советы даны по делу, если в штыки пыжишься, то сиди с не оптимизированной игрой, что ещё сказать, не видя исходников.

Я видел в интернете всяких дятлов, которые фон делают из спрайтов аля NeoGeo, которые BMP-картинку размером 50 MB вставляют на форум и нормально, у них же быстрый интернет, всё грузится. Вот и ты делай приложение для своего быстрого устройства, не парься, раз уж не воспринимаешь сказанное. Что уж тут бисер тебе бросать.


Дао, выраженное словами, не есть истинное Дао.
zzzzzaДата: Четверг, 06 Июля 2017, 20:12 | Сообщение # 7
участник
Сейчас нет на сайте
TLT, я понимаю что такое комната и видимый экран и понимаю, что объект за пределами видимой области тоже память жрет и его надо деактивировать. Проблемы в этом точно нет.
Про дубли не очень понял, но думаю, что у меня такого нет.
Вот такой код у меня в каждом объекте при его создание:
Код
var nameSpr, posInNameSpr;
nameSpr=sprite_get_name(sprite_index);
posInNameSpr=string_pos(global.normalRezolutionSprite, nameSpr);
if (posInNameSpr!=0) {nameSpr=string_replace(nameSpr, global.normalRezolutionSprite, global.rezolutionSprite);}
sprite_index=asset_get_index(nameSpr);

Он выбирает спрайт, который надо использовать. "global.normalRezolutionSprite" по умолчанию равняется "mdpi". "global.rezolutionSprite" определяется при запуске игры и больше никогда не меняется.

А что касается второй части твоего сообщения: то я бы не задавал вопрос, если бы не хотел оптимизировать игру. И что-то я не заметил в своем прошлом сообщение намека на то, что я встаю в штыки, поэтому к чему эта агрессия - я не понимаю.

Добавлено (06 июля 2017, 20:09)
---------------------------------------------
ASH2, имеете ввиду из файла?

Добавлено (06 июля 2017, 20:12)
---------------------------------------------
Морриарте, сейчас попробую.
Что такое атлас и как на группы разделить?


Сообщение отредактировал zzzzza - Четверг, 06 Июля 2017, 20:13
VuvkДата: Четверг, 06 Июля 2017, 21:03 | Сообщение # 8
заслуженный участник
Сейчас нет на сайте
На ум приходит только хранение всех спрайтов во внешних файлах и динамические загрузка/выгрузка только необходимых при переходе по комнатам. Наверное, гамак так и грузит сразу всё, что есть в проекте по умолчанию? Это так, догадочки, потому что я достоверно не знаю.

Сообщение отредактировал Vuvk - Пятница, 07 Июля 2017, 05:53
zzzzzaДата: Пятница, 07 Июля 2017, 02:37 | Сообщение # 9
участник
Сейчас нет на сайте
Vuvk, во мне так же кажется.
LuxorixДата: Пятница, 07 Июля 2017, 06:11 | Сообщение # 10
постоянный участник
Сейчас нет на сайте
zzzzza, есть такая тема в справке texture groups. Суть в том, что все спрайты хранятся на больших текстурных картах. Допустим у тебя 400 спрайтов и 4 текстурных карты на которых размещено 100 спрайтов. Ты загружает уровень и в нем используются спрайты, которые у тебя, к примеру, в 1,2 и 4 текстурной карте и он вынужден загружать все 3 в память. Ты можешь в ручную, распределять спрайты по текстурным картам, чтобы 1 карта была на один уровень. Читай справку.

LUXORIX GAMES

Сообщение отредактировал Luxorix - Пятница, 07 Июля 2017, 06:12
ASH2Дата: Пятница, 07 Июля 2017, 10:20 | Сообщение # 11
участник
Сейчас нет на сайте
Luxorix, хмм... текстурные группы - это хорошо, но, как я понял, тут проблема в том, что старт игры очень болезненный. Текстурные группы оптимизируют саму игру (чтобы между атласами не переключаться лишний раз), но старт игры от текстурных групп может быть ещё более болезненный (в смысле, обычно после распределения по группам некоторые атласы могут быть не до конца заполнены, как следствие - их станет больше).

zzzzza, да, из файла.
Код
sprite_add(fname, imgnumb, removeback, smooth, xorig, yorig);

Вот примерно этой штукой. Правда, там свой гемморой есть, так что смотри сам подойдёт или нет.

P.s. И по поводу текстурных групп: Мануал->Settings->Textures. Там именно как создавать группы. Назначать текстуры на группы: У спрайтов есть Texture Settings, в нём Group. Там и есть перечень созданных тобой групп, чтобы назначить спрайт в группу

P.p.s. Ну и посмотреть результативность своих "атласов": Залезаешь в настройки->Android->Graphics: Texture Page Size - это размер атласов, Preview - посмотреть как он их сгенерирует.

P.p.p.s. Это, естественно, всё для GMS2, но и в первом есть всё аналогичное.


Карсон и Питееерс!!!

Сообщение отредактировал ASH2 - Пятница, 07 Июля 2017, 10:38
zzzzzaДата: Пятница, 07 Июля 2017, 11:59 | Сообщение # 12
участник
Сейчас нет на сайте
Понял, буду разбираться. Большое спасибо!
Форум игроделов » Конструкторы игр и лёгкие в освоении системы разработки игр » Game Maker » Недостаточно ОЗУ игре на GMS 2 (Что делать?)
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг