RS Game Maker Community
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

 
Расширенный поиск
  Главная Форум Вики Блоги FAQ Игры Статьи Примеры Войти Регистрация  
  Просмотр сообщений
Страниц: 1 2 3 4 5 ... 7
1  Портал / Новости / Re: GameMaker Studio 2 : 27 Февраля 2017 в 17:50
Как еще измерить сколько спрайтов движок рисует в сек.
winGMS1.4 - 84 fps - 84*500 42000 img sec.
winGMS2   - 54 fps - 54*500 27000 img sec.
winLove2d - 88 fps - 88*500 44000 img sec.
2  Портал / Новости / Re: GameMaker Studio 2 : 27 Февраля 2017 в 16:45
Love2d
function love.load()
love.window.setMode(800, 600, {vsync=false})
img = love.graphics.newImage("256.png")
end

function love.draw()
for i=1, 500 do
love.graphics.draw(img, 400, 300)
end
love.graphics.print("Current FPS: "..tostring(love.timer.getFPS( )), 10, 10)
end

Win 88 fps как и у гма почти
Как там макс фпс ограничить не нашел, просто всинк вырубил.
3  Портал / Новости / Re: GameMaker Studio 2 : 21 Февраля 2017 в 15:10
Он вне цикла, я бы поставил на то что они еще не занимались оптимизацией.
4  Портал / Новости / Re: GameMaker Studio 2 : 21 Февраля 2017 в 14:39
 
room_speed = 100

repeat(500){
draw_sprite(sprite0,0,400,300)
}
draw_text(10,10,fps)

Спрайт 256х256
winGMS1.4 - 84 fps
winGMS2 - 54 fps
5  Разработка / Вопросы и ответы по GameMaker / Re: Ответы@Gmakers.ru — все вопросы сюда : 21 Февраля 2017 в 12:05
Никогда толком не работал с 3d в гме, и подумалось а что если мое рисование в циклах в сурфейс, можно малыми усилиями перенести в 3d и получить ускорение(ведь видеокарты вроде быстрее работают с direct d3d чем с direct draw), ничего при этом не поломав.

Или может есть какой то быстрый способ рисовать тайлы(бэкграунды) искривленными для создания эффекта высоты ландшафта, сейчас работает скриптом draw_background_pos по аналогии с draw_sprite_pos, и это медленно(значение высоты для каждой точки текстуры берется из буфера, текстура берется из другого буфера).

Подробнее: 3 цикла(по 54+ итерации) в draw begin, каждый рисует в отдельный сурфейс(это для шейдера).

Индусятина или по другому не как?
6  Разработка / Вопросы и ответы по GameMaker / Re: Ответы@Gmakers.ru — все вопросы сюда : 17 Февраля 2017 в 15:12
Не надо хранить имена фонов, храни айдишники. Имя можно получить при помощи background_get_name.
Спасибо! и правда строки ужасно хранятся в памяти, процесс теперь вместо 638мб занимает 366мб, и на фпс местами хорошо повлияло, и файл 166мб->118мб.
7  Разработка / Вопросы и ответы по GameMaker / Re: Ответы@Gmakers.ru — все вопросы сюда : 17 Февраля 2017 в 12:13
А, так ты в этих здоровенных сетках хранишь текст. Но зачем?
Еще давно нашел пример с шейдерным бамп мапингом, оно там рисует в 3 сурфейса, dif normal и spec текстуры, доработал что бы тайловый ландшафт рисовало, и где то надо хранить имена бэкграундов для каждого тайла, 2250х2250 тайлов(256x256px) карта 576000х576000, наверно можно заменить названия бэкграундов на короткие, но выигрыш по памяти не такой большой, и ценой лишнего кода.

Еще есть такой же грид 2250х2250 с высотой тайлов, но там числа.
+Списки статичных объектов(которые не нужно синхронизировать с сервером, кусты, цветы, декор) одновременно загружено 9шт из 100, загружаются в зависимости от позиции игрока в мире, система получилась сложная и потом придется наверно баги неделями ловить.
8  Разработка / Вопросы и ответы по GameMaker / Re: Ответы@Gmakers.ru — все вопросы сюда : 17 Февраля 2017 в 10:11
Vovan1802
Ошибку в логе не нашел, у меня бывает запускается но как то криво свернуто, но в альтабе окно доступно, еще иногда при компиляции win yyc оно глючит и может помочь очистка кэша(кнопка кисточка слева от создания спрайта).

Согласно исследованию Райдо, одна ячейка сетки занимает 16 байт. Следовательно, сетка 2250×2250 занимает всего-то около 80 МБ. Может быть, не в структурах данных дело?
80мб + строки по 10~ символов, если 1 символ 2 байта это еще 100мб + не оптимальная организация данных в памяти, и это только 1 грид.
9  Разработка / Вопросы и ответы по GameMaker / Re: Ответы@Gmakers.ru — все вопросы сюда : 15 Февраля 2017 в 19:17
+Еще куча графики, 4 сурфейса, дело даже не в том что занимает а как получить больше памяти для процесса без out of memory.
10  Разработка / Вопросы и ответы по GameMaker / Re: Ответы@Gmakers.ru — все вопросы сюда : 14 Февраля 2017 в 21:28
Утечка имеет место быть (и на офф форуме про нее писали, забивается оперативка или видео память, не помню уже), surface_free() не забыта, и похоже вот как раз оно неправильно работает.

Изменение единичных пикселей надо было для генерации миникарты, переделал и теперь вместо изменения спрайта, просто рисую в сурфейс который не пересоздаю каждый раз, теперь все ок.

Еще вопрос, есть дата структуры несколько штук, грид 2250х2250, списки, и когда пытаюсь создать еще большой грид то вылезает нехватка памяти (out of memory), я так понимаю не хватает памяти, но процесс пока занимает всего 600-700мб(все процессы не заняли и 50% от оперативки), думаю придется дробить на куски все большие дата структуры и подгружать по мере надобности, только вот не хочется спамить игрока загрузками, можно как то заставить гмс больше выделять памяти?
11  Разработка / Вопросы и ответы по GameMaker / Re: Ответы@Gmakers.ru — все вопросы сюда : 14 Февраля 2017 в 15:42
Можно как то поменять 1 пиксель в спрайте / бэкграунде без применения сурфейса? (с сурфейсом эта операция ограничена, утечка памяти при многократном пересоздании сурфейса)
Написал - прочитал, понял что можно попробовать не пересоздавать сурфейс.
12  Портал / Графика / Re: TileSetGenerator for developers 2D tile games (RPG, RTS, Platformer, ...) : 03 Февраля 2017 в 17:58
А когда дадут зеленый свет уже не нужно будет, продажи можно и без стима делать.
13  Портал / Графика / Re: TileSetGenerator for developers 2D tile games (RPG, RTS, Platformer, ...) : 03 Февраля 2017 в 13:26
Я сейчас как раз ручками тайлы делаю, очень нудно. Как ваш софт попробовать?
14  Разработка / Вопросы и ответы по GameMaker / Re: Ответы@Gmakers.ru — все вопросы сюда : 24 Декабря 2016 в 23:16
Про это в справке очень мало.

Это не точно, но опытным путем кажется работает оно так:
ds_map_add_map создает ключ key, с id-шником другой map, при этом значение скрыто помечается как вложенное map в map.
Там получается ссылка.
Если добавляемый map удалить, то доступа к нему из добавляющего не будет, так как ссылка.
Корректно сработает json_encode json_decode, при этом все сохраняется, после этого, доступ к ключам вложенного map так как будто это его id(в верхнем map), хотя на самом деле там json(как будто еще одна метка).

Похоже на правду?
15  Разработка / Вопросы и ответы по GameMaker / Re: Ответы@Gmakers.ru — все вопросы сюда : 24 Декабря 2016 в 17:41
При открытии проэкта появляется окно "Invalid XML in RSS file", а уже потом открывается 
У меня тоже это вылезает.

Как работает ds_map_add_map? из справки не понятно зачем оно надо.
16  Портал / Песочница (примеры) / Re: Сервер GMS через Electron(nodejs) : 20 Декабря 2016 в 13:24
Добавил файлы main.js и package.json (для папки \resources\app), не обязательно использовать именно их, можно и стандартные.

main.js не стандартный, в нем есть следующее для предотвращения ухода системы в спящий режим:
const {powerSaveBlocker} = require('electron') //Block the system from entering low-power (sleep) mode.
const id_pwr_blk = powerSaveBlocker.start('prevent-app-suspension')

+ выключение возможности свернуть окно(так как в свернутом состоянии не работают события, хотя на сетевые запросы все равно отвечает)(это костыль, диспетчером задач все равно сворачивается):
 win = new BrowserWindow({width: 600, height: 500, x: 600, y: 0, offscreen: true, minimizable: false})

package.json стандартный.


Еще 4 файловых функций, и 1 колбэк:
scr_nodejs_onFS(id, data)
//===== scr_nodejs_onFS
// Этот скрипт вызывается из расширения nodejs4gm.js при
// окончании работы файловой функции, в аргументе0 будет его id (определенный вами)
// argument0 = ID
// argument1 = данные или статус выполнения

nodejs_fs_readFile(id, file)
// Читает файл АСИНХРОННО, id(string), file(string), прочитанные данные будут в argument1 (scr_nodejs_onFS)
nodejs_fs_writeFile(id, file, data)
// Записывает файл АСИНХРОННО, id(string), file(string), data(string), в argument1 будет "ok" (scr_nodejs_onFS)
nodejs_fs_appendFile(id, file, data)
// Присоединяет файл АСИНХРОННО, id(string), file(string), data(string), в argument1 будет "ok" (scr_nodejs_onFS)
nodejs_fs_appendFileSync(file, data)
// Присоединяет файл СИНХРОННО, file(string), data(string), вернет 0 в любом случае
17  Разработка / Вопросы и ответы по GameMaker / Re: Ответы@Gmakers.ru — все вопросы сюда : 15 Декабря 2016 в 15:26
Есть такая штука, STUN и STUNT для пробива НАТа, так вот а что если запилить так: возвращать клиенту его внешний адрес и внешний адрес сервера, серверу при этом слать внешний адрес клиента что бы он его пропинговал.
Получится так полностью пробить НАТ на клиенте и сервере (3я сторона, это наша реализация STUNT с открытыми портами и белым ip)?
18  Портал / Песочница (примеры) / Re: Сервер GMS через Electron(nodejs) : 26 Ноября 2016 в 20:39
Все таки под нагрузкой пакеты могут фрагментироваться, поэтому нужно проверять сообщения полностью, пример обновлен после доработки и тестирования.
Сейчас проверяется и возвращается отдельное сообщение правильно, переваривается нормально:

Фрагментированность - если приходит только кусок сообщения, то он сохраняется и когда придет следующий пакет они соединятся и выполнится код, однако есть вероятность что следующий пакет не совпадет, и это случай "некорректное сообщение", это только теория, но на всякий случай если это будет происходить предусмотрено решение, подписывание сообщения его md5, конкретно:
Использовать вместо nodejs_net_socketWrite_ (это скрипт обертка для отправки сообщений) - nodejs_net_socketWrite_md5
и вместо tm (это скрипт отделяющий сообщения из буфера) - tm_md5
При их использовании производительность падает примерно на ~40%, поэтому пока в примере не используются.

Склеивание пакетов - происходит когда перегружена сеть, нормально разъединяются tm().

Мусор - есть вероятность получения мусорных пакетов или множества фрагментов пакетов которые не получилось склеить, оно будет копиться в буфере, что бы не было утечки памяти в скрипте колбэке scr_nodejs_onData есть это:
if string_length(ds_map_find_value(obj_control.sockets, argument0)) > 2048 { nodejs_net_socketEnd(argument0)} // Если после обработки, остаток в псевдо-буфере слишком большой, то возможно приходит слишком много мусора

Немного теории:
Если вдруг будет слишком много пакетов от клиента, то это баги клиентского софта, либо сетевые глюки, или злонамеренно, в любом случает это вызовет избыточную нагрузку процессора для всего лишь одного клиента, можно завести счетчик, к примеру определиться что клиентский софт не может отправлять больше 20 сообщений с сек., и если приходит больше то беспощадно его отключать, то же самое с размером сообщения или буфера в целом, перед вычленением его от туда поверить что он не больше определенного размера, иначе отключать.

Еще понадобится, после тестирования готового сервера, ограничить количество одновременно подключенных сокетов, количество уже подключенных можно взять так:
ds_map_size(obj_control.sockets)

Последнее тестирование примера дало такие результаты у меня: (все на localhost)
Подключено 10000 сокетов и 15000 сообщений в сек. - стабильно, примерный пинг 20-60мс.
Подключено 60 сокетов и 19200 сообщений в сек. - стабильно, примерный пинг 10-40мс.
Чем больше сообщений тем сильнее нагружается проц, и когда его не хватает(1фпс) разбухает процесс.
Чем больше сокетов тем меньше можно переваривать сообщений.
Это все без полезной логики в коде, что будет на готовом сервере зависит от сложности кода.

Новый скрипт колбэк, для отложенного выполнения кода:
//===== scr_nodejs_onTimeout
// Этот скрипт вызывается из расширения nodejs4gm.js при
// срабатывании тайм аута
// argument0 = text1
// argument1 = text2
// argument2 = text3

Новые функции:
nodejs_net_socketPause(socket)
//Ставит сокет на паузу, при этом ивент "data" не будет вызываться.
 
nodejs_net_socketResume(socket)
//Снимает сокет с паузы.

nodejs_cr_createHash(str, hashtype)
//Возвращает хэш от str(string), тип хэша hashtype(string) может быть например указан так "md5",
//полный список типов:
//"DSA", "DSA-SHA", "DSA-SHA1", "DSA-SHA1-old", "RSA-MD4", "RSA-MD5", "RSA-MDC2", "RSA-RIPEMD160", "RSA-SHA", "RSA-SHA1", "RSA-SHA1-2", "RSA-SHA224", "RSA-SHA256", "RSA-SHA384", "RSA-SHA512", "dsaEncryption", "dsaWithSHA", "dsaWithSHA1", "dss1", "ecdsa-with-SHA1", "md4", "md4WithRSAEncryption", "md5", "md5WithRSAEncryption", "mdc2", "mdc2WithRSA", "ripemd", "ripemd160", "ripemd160WithRSA", "rmd160", "sha", "sha1", "sha1WithRSAEncryption", "sha224", "sha224WithRSAEncryption", "sha256", "sha256WithRSAEncryption", "sha384", "sha384WithRSAEncryption", "sha512", "sha512WithRSAEncryption", "shaWithRSAEncryption", "ssl2-md5", "ssl3-md5", "ssl3-sha1", "whirlpool"
 
nodejs_setTimeout(ms, arg1, arg2, arg3)
//Отложенный ивент, возвращает id(string), через ms(миллисекунды) выполнится скрипт scr_nodejs_onTimeout с тремя пользовательскими аргументами arg1, arg2, arg3 (все string).
 
nodejs_clearTimeout(id)
//Остановка отложенного ивента (см. выше) по id(string)

19  Портал / Песочница (примеры) / Re: Сервер GMS через Electron(nodejs) : 25 Ноября 2016 в 12:15
Обнаружилась бага, если во время нагрузки сервера, открыть пару сайтов в броузере, процесс сервера начинает сильно разбухать(гиг и больше со временем), сделал дамп посмотрел чего там, что это может быть?:
http://data3.floomby.com/files/share/25_11_2016/9/9BN0WZ19l0iH8JAZU1yUEQ.jpg
И оно странное, если отдельно что то качать, или нагрузить проц то все нормально.
Похоже что какой то конфликт с SeaMonkey.
20  Портал / Песочница (примеры) / Re: Сервер GMS через Electron(nodejs) : 22 Ноября 2016 в 16:44
Слово «браузер» уже давно и прочно вошло в русский язык. А «call» — это базовое слово, которое должен знать третьеклассник.
В английском слове browser буква О, ну и буква А английская произносится как эй, так что логично было писать как слышится для слов которых раньше не было в словаре(хз, может и сейчас нет).

Добавил:

nodejs_net_socketEnd(socket)
Корректно закрывает сокет(string), оставшиеся в буффере данные досылаются, отправляет пакет FIN

nodejs_sleep(ms)
Задержка кода в миллисекундах(double)

После некоторого гугления оказалось что протоколы tcp-ip сами следят за целостностью и корректностью пакетов, поэтому немного облегчил скрипт проверки входящих сообщений.
Порядок в котором приходят пакеты может быть не правильным.
Отключил алгоритм нагла в электроне на сервере и источнике нагрузки, однако как, то же самое, проделать в чистой компиляции клиента для вин не понятно, может нельзя вовсе, это значит что разделять сообщения придется скриптом tm_().

Применил(так как оно для сервера не надо):
draw_enable_drawevent(false);
application_surface_draw_enable(false);
application_surface_enable(false);

Средний пинг теперь работает, по 10 последним пингам с одного сокета.

Убил мертворожденную draw_text-овую консольку c("text"), вместо нее есть адекватная nodejs_console_log("text") выводящая в консоль электрона.
Страниц: 1 2 3 4 5 ... 7
RSGMC (gmakers.ru) © 2007—2017
Счётчик–@Mail.ru