Не совсем понятно - у тебя танк двигается только в 4 направлениях?
Он может в любую сторону. Я пробовал делать mp_potential_step и ставить скорость 0.00000000000001, потом меняется direction. Дальше я приравниваю mdir(поворот самого танка) к direction и когда mdir=direction то приравниваю speed к 1 и танк должен ехать, но это у меня почему то не получается.
ЦитатаOrdan ()
А я думал в гамаке есть поиск пути для ии...
Правда? Я даже не знал! Мне надо что бы при повороте, танк останавливался и плавно поворачивался и когда повернулся, продолжал ехать.
Здравствуйте. Делаю RTS игру, но тут у меня появилась проблема с танком, стрельба готова, поиск цели есть, но вот не понимаю как сделать движение! Мне надо сделать так что бы танк объезжал препятствия и ехал в координаты которые записаны в переменные xp и yp Желательно что бы это было поиском пути, но если это трудно реализовать, то хотя бы обычным mp_potential_step. Сама трудность в том, что мне надо что бы при повороте танк останавливался, разворачивался в сторону которую надо и ехал дальше.
Вот пример на картинке. Танку надо доехать до точки X2, но на прямую так просто не проехать. Тогда он должен ехать в точку X1, когда проедет, он должен остановится, и плавно развернутся(плавный разворот уже готов) в сторону точки X2. Когда танк к ней развернётся, он должен продолжить двигатся.
Здравствуйте. Я вот сделал простую вещь: Турель плавно поворачивается к квадратику и начинает по нём стрелять, но вот какой код я не ввожу, он не работает, хотя должен. Например instance_exists всегда возвращает true, даже если я туда введу пустую строку '' Ну это ладно, мало ли что... Ну дальше это вообще ужас! Я записываю в координату target айди ближайшего квадрата и делаю плавный поворот пользуясь знаменитым скриптом DreamRunner. Турель поворачивается, но почему то в правую сторону, тоесть к 0. Пробовал создать ещё две координаты(для записи x y врага), турель уже поворачивается, но теперь она не меняет кадры(типо она должна крутится) Мне теперь что бы сделать простую турель, надо наделать кучу переменных, убрать анимацию и кучу других важных вещей?
Вот скрипты:
///Ai var target; target=instance_nearest(x,y,te) if instance_exists(target) { with target { other.xt=x other.yt=y } if image_angle!=point_direction(x,y,xt,yt) { image_angle=point_direction(x,y,xt,yt) if image_speed>0.00 {image_speed-=0.05} } if image_angle=point_direction(x,y,xt,yt) { if image_speed<0.5 {image_speed+=0.01} image_angle=point_direction(x,y,xt,yt) if image_index=1 && image_speed>0.30 { if w=0 {w=1}else{w=0} if w=0 { instance_create(xt+lengthdir_x(10,irandom(360)),yt+lengthdir_y(10,irandom(360)),obj_sbj_bull) //sound_play(snd_bld_gat1) } if w=1 { instance_create(xt+lengthdir_x(10,irandom(360)),yt+lengthdir_y(10,irandom(360)),obj_sbj_bull) //sound_play(snd_bld_gat1) } } } } Переменные xt и yt в Create турели.
Надеюсь на вашу помощь.
Добавлено (31 марта 2015, 17:21) --------------------------------------------- Кто нибуть поможет? Что делать?
надеюсь байты которые отправляются как размер картинки ты не сохраняешь вместе с данными из буфера в файл
Нет, я не отправляю никакие размеры файла. У меня в начале передаётся название, а далее читается строка из файла, символы в которой переводятся в цифры и записываются в буфер. Когда строка прочитана, в буфер записывается число 60000 что бы клиент понял что дальше надо всё писать с новой строки, а когда полностью прочитан файл, записывается 60001. Далее клиент принимает, он создаёт файл с именем который отправил ему сервер, и начинает всё записывать в него переводя цифры в буквы которые отправил ему сервер.
Добавлено (14 марта 2015, 13:25) --------------------------------------------- Всё, вроде бы получилось, но появилась одна неудобная вещь: Когда клиенту приходит файл, он сохраняет его себе, но зачем то в конце добавляет пробел. Из за этого файл весит на 2байта больше. Если так передать картинку, то она может не работать. Как это исправить? Вот скрипты:
var fln,bt,strg; strg='' fln=file_text_open_write(working_directory+'\'+string(readstring())) while(1) { bt=readushort()-1 if bt=64001 {file_text_close(fln);break} if bt=64000 {file_text_write_string(fln,strg);strg='';file_text_writeln(fln)} if bt<64000 {strg=strg+string(chr(bt))} }
Добавлено (15 марта 2015, 01:08) --------------------------------------------- Всё, решил проблему!
Я воспользовался стандартными функциями 39dll типа fileopen, filesize и т.д. Вот сами скрипты:
Код
/* argument0 - Путь к файлу с именем argument1 - Часть файла argument2 - Буфер
@Автор скрипта - maksim1221232 (14.03.2015 23:44:20) */ var buff; buff=0 if argument2!=0 {buff=argument2} file=fileopen(argument0,2); if argument1!=0 {filesetpos(file,4096*argument1)} writestring(filename_name(argument0),buff) writestring(''+string(filesize(file)),buff) writeushort(argument1+1,buff) fileread(file,4096,buff); fileclose(file);
Код
/* argument0 - Путь к папке в которую надо сохранить файл(С косой чертой в конце).
Возвращает true когда вес файла в клиенте совпал с весом в сервер(тоесть файл полностью пришёл), или наоборот, false если не совпадает. @Автор скрипта - maksim1221232 14.03.2015 (23:52:41) */ var file,sz,szc; file=fileopen(string(argument0)+string(readstring()),2) sz=readstring() filesetpos(file,((readushort()-1)*4096)) filewrite(file) szc=filesize(file) fileclose(file) if szc=real(sz) {return(true)}else{return(false)}
Всё очень просто. Используете эти скрипты как и другие (writebyte,writeshort и т.д) Вам понадобится создать одну переменную, которая будет хранить часть переданного файла. Вот пример: В сервере пишете: clearbuffer(1) writebyte(2,1) writefile(working_directory+'\music.mp3',fpos,1) sendmessage(socket,0,'',1) fpos+=1
В клиенте принимаете: if readfile(working_directory+'\music\') { show_message('Файл передан!') } else { clearbuffer() writebyte(3) sendmessage(socketserver) Когда в сервер приходит пакет с номером три(который выше) то просто запихиваете код отправки файла(как выше где ещё есть пер. fpos) туда и всё)
У меня за секунд ~30 передалась музыка 7.1мб P.s Скорость комнаты с сервером 100 а в клиенте 70 P.s.s Также можете побаловаться с весом. Например 4кб увеличить до 16 или ещё как нибуть... P.s.s.s Если кому нибуть понадобится пример, пишите в личку или в скайп. }
Сообщение отредактировал maksim1221232 - Воскресенье, 15 Марта 2015, 01:20
Всем привет. Мне нужен скрипт которые переведёт каждый символ в цифру, которую потом можно будет вернуть обратно в тот же символ. Например есть строка:test а цифрами это будет к примеру 32 65 54 71 Надеюсь на вашу помощь.
Я использую TCP. Или это всё одно и тоже? P.s Я про вес пакета который они могут передать
Добавлено (14 марта 2015, 12:11) --------------------------------------------- И почему они не могут передать такой вес? Картинка всего то весит 6кб, я уже пытаюсь передать вообще 180байт, вроде бы приходит, но картинку открыть нельзя. Раньше я когда делал игры, передавал карты весом 23кб и ничего, всё полностью приходило без всяких ошибок.
Я знаю. Я думал что игра может затормозить на время, но главное что файл придёт целым.
ЦитатаQvant ()
1)сначала отсылай байты размер буфера 2)потом отсылаем буфер пакетами по 8192 байтов (или меньше) 3)в клиенте проверяй стал ли буфер равным байтам которые приняли из 1) пункта если он меньше , то ничего не делаем а как только буфер станет равным - сохраняем буфер в файл , это и будет картинка.
Я тут не очень всё понял. Ты имеешь в виду что надо передавать файл по 8Кб? P.s Извини за мою тупость Можете мне разъяснить всё по подробнее, или пример какой нибуть дать...
Qvant, Да ладно? Я знаю что он может сохранить в свой буфер и передать, но как я только не пробовал, ничего не получалось. Даже стандартными скриптами в 39DLL
Добавлено (13 марта 2015, 22:08) --------------------------------------------- P.s Передаётся только часть файла
Здравствуйте. Я вот только что пробовал передать клиенту обычную png картинку, но ничего не получилось. Я перевёл каждый символ в цифру, пользуясь ord(x) и отравил всё это клиенту. Дальше уже в клиенте я всё записывал в файл используя chr(x) Проверьте что не так: P.s Я тот человек который сидит на gm8
Скрипт writefile:
Код
var str,i,fln,buff,s; buff=argument1 fln=argument0 writestring(filename_name(fln),buff) fln=file_text_open_read(fln) while(1) { str=file_text_read_string(fln) i=0 while(1) { s='' s=s+string(ord(string_char_at(str,i))) if s!='' {writeushort(s,buff)} if i<string_length(str) {i+=1}else{break;} } if file_text_eof(fln) {writeushort(60000,buff);file_text_close(fln);break;}else{writeushort(59999,buff);file_text_readln(fln)} }
Скрипт readfile:
Код
var fln,bt; fln=file_text_open_write(working_directory+'\'+string(readstring())) while(1) { bt=readushort() if bt=60000 {file_text_close(fln);break} if bt=59999 {file_text_writeln(fln)} if bt<59999{file_text_write_string(fln,chr(bt))} }
А оно тебе надо?! Я не считаю,что именно за них стоит платить за Про в отличии от бесплатного Стандарта.
Щас то там ничего такого нет, но вдруг поменяется что нибуть? Раньше была Standart версия, в steam'e я теперь её больше не вижу. Ещё раньше я помню говорили что покупая про ты получаешь массу интересных плюшек и прочего.