Game Maker - создание игр | HellRoom Games
Февраль 21, 2017, 05:57:41 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Jelly Killer - релиз!
 
   Начало   Game Maker Помощь Правила форума Поиск Календарь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Отображение поворота у других игроков в Networking  (Прочитано 396 раз)
0 Пользователей и 1 Гость смотрят эту тему.
AdamSpencer
Новичок
*

Репутация: 0
Offline Offline

Пол: Мужской
Russian Federation Russian Federation

API: GameMaker Studio Standard
Сообщений: 8



« : Январь 03, 2017, 18:42:31 »

Здравствуйте, дорогие друзья, работаю сейчас над проектом и столкнулся с проблемой: другие игроки не видят поворота моего спрайта.
Вот код
в степе
var dir = o_local_player.direction
buffer_seek(Buffer,buffer_seek_start,0)
buffer_write(Buffer,buffer_u8,4)
buffer_write(Buffer,buffer_f32,x)
buffer_write(Buffer,buffer_f32,y)  
buffer_write(Buffer,buffer_s16,dir)

в скрипте :

 case 4:
     var iddg,xx,yy,dir;
     iddg = buffer_read(buffer,buffer_u32)
     xx = buffer_read(buffer,buffer_f32)
     yy = buffer_read(buffer,buffer_f32)
     dir = buffer_read(buffer,buffer_s16)
    
     with(o_player)
     {
     if idd = iddg
     {
     o_player.x = xx
     o_player.y = yy
     o_player.image_angle = dir
    
    
     }
     }
    
     buffer_seek(Buffer,buffer_seek_start,0)
     buffer_write(Buffer,buffer_u8,10)
     buffer_write(Buffer,buffer_u32,iddg)
     buffer_write(Buffer,buffer_f32,xx)
     buffer_write(Buffer,buffer_f32,yy)
     buffer_write(Buffer,buffer_s16,dir)

     scr_send_to_all(socket,buffer)
Записан
SilentPhil
Томатный революционер
GM Pro user
*

Репутация: 275
Offline Offline

Пол: Мужской
Russian Federation Russian Federation

Награды:
500 сообщений!За постоянность! [50 дней на форуме]За лояльность! [+150 репутации]Настоящий игродел!Второе место на HellRoom Jam #6 [По следам Артакса]4 место в конкурсе Адекватные игры #3 [Антиутопия]...
API: GameMaker Studio Pro
Деятельность: Pixel Art, GML
Сообщений: 774


Томатный революционер


WWW
« Ответ #1 : Январь 03, 2017, 19:07:31 »

Здесь считывается u32
Код:
var iddg,xx,yy,dir;
iddg = buffer_read(buffer,buffer_u32)
xx = buffer_read(buffer,buffer_f32)
yy = buffer_read(buffer,buffer_f32)
dir = buffer_read(buffer,buffer_s16)

Но здесь он не передается
Код:
var dir = o_local_player.direction
buffer_seek(Buffer,buffer_seek_start,0)
buffer_write(Buffer,buffer_u8,4)
buffer_write(Buffer,buffer_f32,x)
buffer_write(Buffer,buffer_f32,y)   
buffer_write(Buffer,buffer_s16,dir)
Записан

twitch    youtube
     
Да, на них можно кликать.
AdamSpencer
Новичок
*

Репутация: 0
Offline Offline

Пол: Мужской
Russian Federation Russian Federation

API: GameMaker Studio Standard
Сообщений: 8



« Ответ #2 : Январь 03, 2017, 21:27:14 »

в u32 считывается наименование, а не image_angle. Angle считывается s16. И, простите, что значит он не передается?

Добавлено: Январь 03, 2017, 21:29:13
network_send_packet(socket,Buffer,buffer_tell(Buffer))  я недописал
Записан
SilentPhil
Томатный революционер
GM Pro user
*

Репутация: 275
Offline Offline

Пол: Мужской
Russian Federation Russian Federation

Награды:
500 сообщений!За постоянность! [50 дней на форуме]За лояльность! [+150 репутации]Настоящий игродел!Второе место на HellRoom Jam #6 [По следам Артакса]4 место в конкурсе Адекватные игры #3 [Антиутопия]...
API: GameMaker Studio Pro
Деятельность: Pixel Art, GML
Сообщений: 774


Томатный революционер


WWW
« Ответ #3 : Январь 04, 2017, 08:24:47 »

Чтобы увеличить шансы на помощь, нужно было как-то отформатировать то, что вы написали в первом сообщении. Где находится этот степ, где скрипт? Что из этого в сервере, что в клиенте?
Посему пришлось включать режим экстрасенса. В моих словах будет больше смысла, если принять предположение, что то, что степ - это клиент, а скрипт - сервер.
На будущее: объясняйте свою проблему так, чтобы другие поняли.
Записан

twitch    youtube
     
Да, на них можно кликать.
AdamSpencer
Новичок
*

Репутация: 0
Offline Offline

Пол: Мужской
Russian Federation Russian Federation

API: GameMaker Studio Standard
Сообщений: 8



« Ответ #4 : Январь 04, 2017, 17:59:40 »

Согласен, извиняюсь. Отправка координат и поворота происходит в объекте o_local_player, затем данные должны считываться сервером и перенаправлять другим игрокам, однако происходит отправление толкьо лишь координат, а поворота, как токового, нет. Заранее извиняюсь за свои непонятливые сообщения.
Записан
SilentPhil
Томатный революционер
GM Pro user
*

Репутация: 275
Offline Offline

Пол: Мужской
Russian Federation Russian Federation

Награды:
500 сообщений!За постоянность! [50 дней на форуме]За лояльность! [+150 репутации]Настоящий игродел!Второе место на HellRoom Jam #6 [По следам Артакса]4 место в конкурсе Адекватные игры #3 [Антиутопия]...
API: GameMaker Studio Pro
Деятельность: Pixel Art, GML
Сообщений: 774


Томатный революционер


WWW
« Ответ #5 : Январь 04, 2017, 19:25:05 »

Цитировать
network_send_packet(socket,Buffer,buffer_tell(Buffer))  я недописал
Так не в этом была проблема?

Проще всего - скинуть мне в личку проект, так я быстрее смогу помочь.
Записан

twitch    youtube
     
Да, на них можно кликать.
AdamSpencer
Новичок
*

Репутация: 0
Offline Offline

Пол: Мужской
Russian Federation Russian Federation

API: GameMaker Studio Standard
Сообщений: 8



« Ответ #6 : Январь 05, 2017, 02:38:26 »

Я кинул инвайт в друзья, я почему то могу вкладывать файлы только здесь, а не в личке, например
Записан
SilentPhil
Томатный революционер
GM Pro user
*

Репутация: 275
Offline Offline

Пол: Мужской
Russian Federation Russian Federation

Награды:
500 сообщений!За постоянность! [50 дней на форуме]За лояльность! [+150 репутации]Настоящий игродел!Второе место на HellRoom Jam #6 [По следам Артакса]4 место в конкурсе Адекватные игры #3 [Антиутопия]...
API: GameMaker Studio Pro
Деятельность: Pixel Art, GML
Сообщений: 774


Томатный революционер


WWW
« Ответ #7 : Январь 05, 2017, 08:07:49 »

Просто загрузите архив на любой файловый хостинг и скиньте ссылку в личку.

Добавлено: Январь 06, 2017, 11:35:55
o_remote_player
Априори не способен вращаться, даже если попытаться менять его image_angle.
Код:
draw_sprite(spr_PlayerWalkBody2,1,x,y)
следует заменить на draw_sprite_ext, создав зависимость от image_angle.

o_local_player
79 строчка
Код:
buffer_write(Buffer,buffer_u8,6)
Непонятно зачем в буффер записывается этот байт, в последствии он не считывается. Это приводит к тому, что последующие данные будут прочитаны неверно.
Удаляем.

scr_received
Код:
buffer_seek(Buffer,buffer_seek_start,0)
buffer_write(Buffer,buffer_u8,10)
buffer_write(Buffer,buffer_u32,iddg)
buffer_write(Buffer,buffer_f32,xx)
buffer_write(Buffer,buffer_f32,yy)
Тут данные о направлении даже не передаются другим игрокам. А ведь все затевалось ради этого. Добавляем. (используем один байт вместо двух - для этого просто делим dir на 2. При приеме просто умножим на 2 и получим направление).
Код:
buffer_write(Buffer,buffer_u8, dir div 2);

scr_client
Код:
iddg = buffer_read(buffer,buffer_u32)
xx = buffer_read(buffer,buffer_f32)
yy = buffer_read(buffer,buffer_f32)
Тоже самое. Добавляем чтение переданного направления.
Код:
var dir = buffer_read(buffer, buffer_u8) * 2;

Где-то там же:
Код:
with(o_remote_player)
{
    if idd = iddg
    {
       o_remote_player.x = xx
       o_remote_player.y = yy
    }
}
Все, что находится внутри конструкции with уже относится к образцу, к которому обратились через with.
Поэтому o_remote_player из with стоит удалить, ибо начнутся проблемы при двух и более образцах объекта o_remote_player. (Там такое есть еще в парочке мест).
Ну и стоит добавит присваивание поворота.
Код:
with(o_remote_player)
{
    if idd = iddg
    {
       x = xx
       y = yy
       image_angle = dir;   
    }
}

Вот и все.

А вообще код очень плохой, с такими навыками рано еще в сеть лезть.
« Последнее редактирование: Январь 06, 2017, 11:35:55 от SilentPhil » Записан

twitch    youtube
     
Да, на них можно кликать.
AdamSpencer
Новичок
*

Репутация: 0
Offline Offline

Пол: Мужской
Russian Federation Russian Federation

API: GameMaker Studio Standard
Сообщений: 8



« Ответ #8 : Январь 09, 2017, 12:58:48 »

Спасибо, буду учиться на своих ошибках

Добавлено: Январь 09, 2017, 13:25:37
Кстати, зачем делить значение на 2, для того, чтобы памяти осталось больше?
« Последнее редактирование: Январь 09, 2017, 13:25:37 от AdamSpencer » Записан
AndrewVideoGames
Главный Модератор
*

Репутация: 594
Offline Offline

Пол: Мужской
Russian Federation Russian Federation

Награды:
5000 сообщений!За постоянность! [200 дней на форуме]За лояльность! [+500 репутации]За помощь новичкам!
API: GameMaker Studio Pro
Деятельность: Coder, Artist
Сообщений: 5652



« Ответ #9 : Январь 09, 2017, 14:36:05 »

Кстати, зачем делить значение на 2, для того, чтобы памяти осталось больше?
Чтобы меньший объём данных надо было передавать.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

Vendet | HellRoom Games © 2006-2017 All Rights Reserved
Powered by SMF 1.1.21 | SMF © 2013, Simple Machines