Столкнулся с проблемкой... работает игра у одного игрока нормально - машина поворачивает, виден тормознуй путь, дым. когда включаю второе окно я вижу машину второго игрока... НО! при повороте спрайт нефига не поворачивает, как был прямоугольник так и скачет. нету ни дыма ни тормозного пути....
первый раз пробую 39длл, поэтому за код тапками некидайтесь, мой код смесь урока Deswinga и движка car_engine за спрайты не ругайте это не спрайты и не наброски это тестовая хрень (я про "машину")
прошу вас посмотреть на сие чудо
http://rghost.ru/4679795 - неактуален
управление поймете по исходнику
Добавлено (08.03.2011, 19:19) --------------------------------------------- очень прошу помогите 2 человека скачали но молчат как партизаны немогу понять в чем дело @_@
Добавлено (08.03.2011, 19:56) --------------------------------------------- кто качает хоть чтото прокоментируйте >...<
Добавлено (10.03.2011, 16:04) --------------------------------------------- ну помогите ктонибудь то что я только непопробывал я тут уже новую версию разрабатываю но нефига немогу понять почему не видит он угол поворота
Добавлено (10.03.2011, 16:05) --------------------------------------------- фаил скачан 6 раз и 0 коментариев ><
Добавлено (10.03.2011, 16:19) --------------------------------------------- если кто-то не может скачать а хочет помочь могу выложить код
Я несколько дней назад смотрел код. Там проблема случайно не в том, что ты не отправляешь пакет с информацией об угле поворота? Сейчас точно не вспомню, но вроде бы там клиент отдает только координаты. Новичкам изучающим GML кликать сюда. Много примеров, исходников, библиотек и вообще всего что вам только может пригодиться. Автор портала, прости меня за ссылку, наболело =)
сейчас выложу коды (но лучше все-таки скачать фаил) коды не с этой а с самой последней версии (роли не играет как там непашет так и тут х_х)
клиент объект objControl событие step
while(1) //Начинается бесконечный цикл http://ru.wikipedia.org/wiki/Бесконечный_цикл { size = receivemessage(socket); //Получить следующее сообщение в очереди if(size < 0)break; //Если не получили сообщение, то выходим из цикла if(size == 0) //Если отключились от сокета - выходим { instance_destroy(); //уничтажаем обьект (а при уничтожении рассмотрим код ниже) break; } mid = readbyte(); //Прочитать сообщение (readbyte() читает данные)
switch(mid) { case newplayer: pid = readbyte(); //Читаем данные, которые отправил нам сервер (у нас это - playerid) player = instance_create(0, 0, objRemote); //Создаем objRemote player.x = readshort(); //Читаем координаты х player.y = readshort(); //Читаем координаты у player.image_angle = readshort(); player.nick = readstring(); //Читаем ник (переменную) players[pid] = player; //Добавляем в playerlist break; //Если не ошибаюсь, то разрыв соединения
case playerlocation: player = players[readbyte()]; //Смотрим айди персонажа в playerlist player.x = readshort(); //set x player.y = readshort(); player.direction = readshort(); player.image_angle = readshort(); //тадамс! Читаем угол поворота других игроков! *_* break;
case exitgame: player = players[readbyte()]; //получить идентификатор игрока из playerlist with(player)instance_destroy(); //Уничтожаем break;
case playernick: player = players[readbyte()]; //Получить идентификатор игрока из playerlist player.nick = readstring(); //Смотрим никнейм break; } }
draw_sprite_ext(sprite_index, image_index, x, y,1,1,image_angle,c_white,1); draw_text(x, y, nick); //по х у, относительно спрайта, пишем свой ник!
сервер, обьект server
player = tcpaccept(listen, 1); //Принимаем нового игрока if(player) //Иесли игрок зашел { playerid = newplayerid(); //Генерируем ему id if(playerid < 0)exit; //Если слишком много игроков, выходим i = instance_create(0, 0, objPlayer); //Создаем обьект игрока i.socketid = player; //Установливаем разъем ID для игрока в сокет, которого только что приняли i.playerid = playerid; players[playerid] = i; setnagle(player, false); //Выключить алгоритм Нагла для сокета
clearbuffer(); writebyte(playerlocation); //message id writebyte(playerid); //наш id writeshort(x); //позиция x writeshort(y); //позиция у writeshort(image_angle) //переменная image_angle, вращение //Отправляем другим with(objPlayer) { if(id != other.id) { sendmessage(socketid); } }
alarm[0] = 3;
сервер, объект player событие step
while(1) //Бесконечный цикл { size = receivemessage(socketid); if(size < 0)break; if(size == 0) { instance_destroy(); break; } timeout = 0; mid = readbyte(); //Читаем сообщение id switch(mid) { case playerlocation: //players location x = readshort(); //Читаем х y = readshort(); //Читаем у objPlayer.image_angle = readshort(); //тадамс! Читаем угол поворота других игроков! *_* break;
case playernick: //Новый никнейм nick = readstring(); //Читаем никнейм clearbuffer(); //Чистим буффер writebyte(playernick); //Пишем messageid writebyte(playerid); //Пишем мой id writestring(nick, true); //пишем nick //Отправляем игрокам with(objPlayer) { if(id != other.id) { sendmessage(socketid); } } break;
case exitgame: //Если игрок вышел instance_destroy(); //Уничтожаем break; } } timeout += current_time - deltatime; deltatime = current_time; if(timeout > 8000)instance_destroy(); //if havnt received a message in 8 seconds then destroy
незнаю) исходники не мои ) сервер/клиент делал по уроку Deswinga машина из car engine
мне бы понять в каком порядке что куда писать может сам бы допер но и вот по этому http://www.39dll.ru/publ/uroki/zamorochki/byl_o_chetyrekh_mestakh/7-1-0-10 делал нефига не спасает
Как называется обьект которым руководит непосредственно игрок и где код рисующий его image_angle? Новичкам изучающим GML кликать сюда. Много примеров, исходников, библиотек и вообще всего что вам только может пригодиться. Автор портала, прости меня за ссылку, наболело =)
руководитель в клиенте objControl в сервере server сам игрок objPlayer другие игроки objRemote <- они то и не крутятся код рисующий других игроков draw_sprite_ext(sprite_index, image_index, x, y,1,1,image_angle,c_white,1); draw_text(x, y, nick); //по х у, относительно спрайта, пишем свой ник! Мой проект по типу Guitar Hero ИГРА ВЫПУЩЕНА!
Dva_Kota, я даже описать не могу что произошло О_О
началась дикая колбаса @_@
http://rghost.ru/4709548 внимание версия не та что с исходниками там навороченная)
забыл добавить в архив 39длл... возьмите их с тех файлов, ок?
Добавлено (10.03.2011, 18:06) --------------------------------------------- Dva_Kota, ну игрок то поворачивает, другой игрок не видит этого, хотя первому видно (например играем я и ты. я у себя поворачиваю машинкой, ты у себя тоже а вот с моего компьютера ты двигаешся неменяя направление поворота, как начал прямоугольником так и скачешь
Добавлено (10.03.2011, 18:09) --------------------------------------------- может и исходник новый дать?
Попробуй еще способ для извращенцев: вместо image_angle поставь point_distance(xprevious,yprevious,x,y) Проверь, должно работать. Но нужно искать другое решение. Новый пример инвентаря! /20.06.2012/
весело блин =( есть ли еще варианты? мне вот только этот баг (покачто) доделать и уже можно подставить графику и создавать тему в проектах в разработке ='( Мой проект по типу Guitar Hero ИГРА ВЫПУЩЕНА!
neksins, Код смены значения image_angle в обьекте objControl Новичкам изучающим GML кликать сюда. Много примеров, исходников, библиотек и вообще всего что вам только может пригодиться. Автор портала, прости меня за ссылку, наболело =)
Made_In_USSR, что, простите? если я правильно понял вот код степа(в нем все движение и все координаты как я просматривал)
while(1) //Начинается бесконечный цикл http://ru.wikipedia.org/wiki/Бесконечный_цикл { size = receivemessage(socket); //Получить следующее сообщение в очереди if(size < 0)break; //Если не получили сообщение, то выходим из цикла if(size == 0) //Если отключились от сокета - выходим { instance_destroy(); //уничтажаем обьект (а при уничтожении рассмотрим код ниже) break; } mid = readbyte(); //Прочитать сообщение (readbyte() читает данные)
switch(mid) { case newplayer: pid = readbyte(); //Читаем данные, которые отправил нам сервер (у нас это - playerid) player = instance_create(0, 0, objRemote); //Создаем objRemote player.x = readshort(); //Читаем координаты х player.y = readshort(); //Читаем координаты у player.image_angle = readshort(); player.nick = readstring(); //Читаем ник (переменную) players[pid] = player; //Добавляем в playerlist break; //Если не ошибаюсь, то разрыв соединения
case playerlocation: player = players[readbyte()]; //Смотрим айди персонажа в playerlist player.x = readshort(); //set x player.y = readshort(); player.direction = readshort(); player.image_angle = readshort(); //тадамс! Читаем угол поворота других игроков! *_* break;
case exitgame: player = players[readbyte()]; //получить идентификатор игрока из playerlist with(player)instance_destroy(); //Уничтожаем break;
case playernick: player = players[readbyte()]; //Получить идентификатор игрока из playerlist player.nick = readstring(); //Смотрим никнейм break; } }
Не правильно. Я подозреваю что значение image_angle присваивается где то в событии нажатия клавиши. Так же я подозреваю что вместо того чтобы поворачивать картинку ты поворачиваешь обьект. Поэтому image_angle всегда один и тот же. Советую тщательно проверить код еще раз.
Добавлено (10.03.2011, 18:41) --------------------------------------------- Жирным выделено четние. А мне нужна запись. И не только пакета но и переменной.
Новичкам изучающим GML кликать сюда. Много примеров, исходников, библиотек и вообще всего что вам только может пригодиться. Автор портала, прости меня за ссылку, наболело =)
Сообщение отредактировал Made_In_USSR - Четверг, 10 Марта 2011, 18:42
Жирным выделено четние. А мне нужна запись. И не пакета а переменной.
я совсем запутался +_+
тебе нужно код степа для игрока?
{ if speed>32 speed-=0.5 //ограничение скорости if speed<-8 speed=-8; //ограничение скорости image_angle=direction; //поворот спрайта friction=0.05; //трение spd=speed*5; if qaz=1 and speed>12 speed-=0.5; //при первой передаче макс. скорость равна 10 if qaz=2 and speed>20 speed-=0.5; if qaz=3 and speed>26 speed-=0.5; if qaz=1 tah=speed*0.85/0.12; if qaz=2 tah=speed*0.85/0.2; if qaz=3 tah=speed*0.85/0.26; if qaz=4 tah=speed*0.85/0.32; if qaz=-1 tah=-speed*0.85/0.08; if qaz=0 and tah>0 tah-=1; if speed>0 prb+=speed/20250 else prb-=speed/20250; //пробег if ntr<100 ntr+=0.05; //восстановление нитро со временем if (keyboard_check(vk_up) or keyboard_check(vk_down)) and bnz>0 { if speed>0 bnz-=speed/202500 else bnz-=speed/202500; //топливо } } так чтоли?