Здравствуйте. Мне нужно решить проблему с лагами. Простая rts, вид сверху с сетевой игрой. Раньше при 10 танках(Поиск пути, плавный поворот, стрельба и больше ничего особого) сильно лагало, фпс 10-20. Потом немного оптимизировал его, изменил поиск пути, лагать стало значительно меньше. Но все ровно тормозит, игра даже иногда просто выключается(Прекращена работа программы и т.д).
Кто знает, как оптимизировать? (или это с gms что то?) P.s Пробовал даже Windows YYC(Не пиратка!), говорят что с ним всё очень быстро работает, но разницы я вообще никакой не заметил.
Слышал где то что в режиме отладки можно легко обнаружить причину лагов, но я понятия не имею как им пользоваться. Если это так, то кто нибуть может мне объяснить как им пользоваться? В интернете по поводу этого ничего не нашёл.
Размеры комнаты 768x768 Компьютер: 3.8GHz 8гб ОЗУ Видеокарта GTX 760.
При 30-40 танках фпс уже 40-50...
Сообщение отредактировал maksim1221232 - Понедельник, 16 Ноября 2015, 00:07
Ковыряй дальше свои алгоритмы, особое внимание на step-ы и особенно большое на циклы внутри них. Если какой нибудь цикл выполняет внутри step-а 100 итераций в 40 объектах, то он обязательно уронит тебе фпс. Ghaarp
Подчищай мусор - счищай то, что уже не используешь или вообще не нужно (переменные, массивы). Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает... и никто не знает почему!
Чтобы что-то оптимизировать, нужно сперва сделать профилирование (смотри в справке Profiling). Мои проекты: - Свободный и открытый клон World Of Goo - TrueEngine2D (2D игровой фреймворк основанный на FreeBASIC)
[GameMaker: Studio v1.4.9999]
Сообщение отредактировал OpenGOO - Понедельник, 16 Ноября 2015, 10:33
OpenGOO, Ну вот это, только я все ровно не особо понимаю что там написано.
66% времени выполнения программы тратится в шаге obj_tech_tankt1. Если развернуть пункт (нажать на плюсик слева), можно посмотреть более подробно, на вызовы каких функций\скриптов тратится время выполнения. После этого можно предпринять попытку их оптимизации и сравнить затраты времени после изменения.
Я в свое время обнаружил, что если пользовать show_degug_message в step ивенте, то он тоже может вызывать тормоза. По крайней мере так было раньше. Сейчас я чаще использую draw_text в таких ситуациях.
collision_line... Я даже не знаю как это можно оптимизировать...
Код
//xx,yy точка в которую надо двигаться танку. //tdir, dir - Направление корпуса и пушки. //setangle - Код плавного поворота(DreamRunner'a вроде)
if hp<1 { instance_destroy(); exit; }
if distance_to_point(xx,yy)>2 { if path_index=-1 or (xx!=path_get_point_x(path_index, path_get_number(path_index)-1) and yy!=path_get_point_y(path_index, path_get_number(path_index)-1)) { var path=path_add(); if !mp_grid_path(obj_server.cells,path,x,y,xx,yy,true) {xx=x;yy=y;path_end();exit;} path_start(path,1,0,true) } if direction!=dir { dir=set_angle(dir,direction,2) path_speed=0 } else { path_speed=1 } } else { path_end(); }
if target=-1 { if tdir!=dir {tdir=set_angle(tdir,dir,4)}; var dist=120; with obj_teamp { if !collision_line(x,y,other.x,other.y,obj_wall,0,1) { if color!=other.color and object_index!=obj_bull { if distance_to_object(other)<dist { other.target=id dist=distance_to_object(other) } } } } if target!=-1 {alarm[10]=2} } else { if !instance_exists(target) or collision_line(x,y,target.x,target.y,obj_wall,0,1) {alarm[10]=2;target=-1;exit;} if tdir!=point_direction(x,y,target.x,target.y) {tdir=set_angle(tdir,point_direction(x,y,target.x,target.y),4)} if alarm[0]=-1 { if abs(tdir-point_direction(x,y,target.x,target.y))<3 { with instance_create(x,y,obj_bull) { direction=other.tdir speed=4 color=other.color team=other.team dmg=irandom_range(10,20) stype=2 } alarm[0]=40 } } }
Сообщение отредактировал maksim1221232 - Понедельник, 16 Ноября 2015, 20:58
Если смотреть усредненный результат то лагов нет. В момент выполнения профилирования лаги были? Мои проекты: - Свободный и открытый клон World Of Goo - TrueEngine2D (2D игровой фреймворк основанный на FreeBASIC)
Добавлено (17 ноября 2015, 18:52) --------------------------------------------- Спасибо всем, теперь вообще почти не лагает. При 120 танках фпс упал всего лишь на 5, а раньше при 50 уже было 10.
Но у меня ещё пару простых вопросов, не буду создавать из за них новую тему.
Почему не меняется громкость звука? Когда меняется, а когда нет. И Почему не работает audio_play_sound_at(...)? Воспроизводится звук Windows почему то.