Добавлено (17 ноября 2015, 18:52) --------------------------------------------- Спасибо всем, теперь вообще почти не лагает. При 120 танках фпс упал всего лишь на 5, а раньше при 50 уже было 10.
Но у меня ещё пару простых вопросов, не буду создавать из за них новую тему.
Почему не меняется громкость звука? Когда меняется, а когда нет. И Почему не работает audio_play_sound_at(...)? Воспроизводится звук Windows почему то.
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
Здравствуйте. Мне нужно решить проблему с лагами. Простая rts, вид сверху с сетевой игрой. Раньше при 10 танках(Поиск пути, плавный поворот, стрельба и больше ничего особого) сильно лагало, фпс 10-20. Потом немного оптимизировал его, изменил поиск пути, лагать стало значительно меньше. Но все ровно тормозит, игра даже иногда просто выключается(Прекращена работа программы и т.д).
Кто знает, как оптимизировать? (или это с gms что то?) P.s Пробовал даже Windows YYC(Не пиратка!), говорят что с ним всё очень быстро работает, но разницы я вообще никакой не заметил.
Слышал где то что в режиме отладки можно легко обнаружить причину лагов, но я понятия не имею как им пользоваться. Если это так, то кто нибуть может мне объяснить как им пользоваться? В интернете по поводу этого ничего не нашёл.
Размеры комнаты 768x768 Компьютер: 3.8GHz 8гб ОЗУ Видеокарта GTX 760.
При 30-40 танках фпс уже 40-50...
Сообщение отредактировал maksim1221232 - Понедельник, 16 Ноября 2015, 00:07
В объекте которому нужно двигаться создаёшь в Create сетку. Create:
Код
cells=mp_grid_create(0,0,room_width,room_height,20,20)//Создаёт сетку на всю комнату. Ширина и высота ячейки 20 20 mp_grid_add_instances(cells,obj_wall,0)//Добавляем в нашу сетку стены.
Потом в Step вставляешь код:
Код
var path=path_add();//Добавляем путь. if !mp_grid_path(cells,path,x,y,obj_player.x,obj_player.y,false) {path_end();exit;}//добавляем путь от точки x/y до точки obj_player.x/y. false - Можно ли двигаться по диагонали. Функция возвращает отрицательное число если путь не найден. path_start(path,1,0,false)//Начинаем двигаться по пути...
Как то так. Можешь добавить дополнительные условия, типо instance_exists и т.д.
Всем привет. У меня странная проблема, с которой я не знаю что делать.
У меня есть сервер и клиент, они прекрасно работают, но примерно в конце игры в сервере выскакивает ошибка "Out of memory". Я вначале подумал что мало оперативной памяти игре, поставил библиотеку CleanMem, но ничего не помогло! Потом я подумал что размер буфера маленький, и увеличил его в три раза, вроде бы немного лучше, но все ровно проблема так и не решилась.
Кто знает с чем это связано и как это решать?
P.s Компилировал в Windows и Windows(YYC) разницы нет.
vampir0305, 1. Когда сокет отключается, receivemessage возвращает значение меньше 0. 2. Если получилось отправить простую переменную, то почему не получается отправить x,y? :\
Клиент:
Код
clearbuffer(1)//Чистим буфер 1 writebyte(1,1)//Записывает id пакета в буфер 1 writeshort(x,1)//Записывает x в буфер 1 writeshort(y,1)//Записывает y в буфер 1 sendmessage(server,"",0,1)//Отправляем всё серверу из буфера 1. Где "" и 0, не трогай, это для UDP.
Сервер:
Код
size = receivemessage(current_client) if size<0 {show_message("Клиент отключился :O");} if size!=0 //Если что то пришло... { switch(readbyte())//Читаем id пакета из буфера. { case 1://Если id пакета 1, то читаем координаты... x=readshort() y=readshort() break;
case 2: //Если id пакета 2, то что то ещё... break; } }
3. В Create сервера после room_restart ставь ещё exit что бы не натворить лишнего.