Game Maker - создание игр | HellRoom Games
Январь 19, 2017, 13:43:44 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

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

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

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



« : Январь 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
*

Репутация: 270
Online Online

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

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


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


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)
Записан

Похвалы делают людей ленивыми, ругайте друг друга. Оценку любого проекта надо начинать со слов «Так, что это за г…но?». (с)Veil
twitch  youtube
     
AdamSpencer
Новичок
*

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

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

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



« Ответ #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
*

Репутация: 270
Online Online

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

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


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


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

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

Похвалы делают людей ленивыми, ругайте друг друга. Оценку любого проекта надо начинать со слов «Так, что это за г…но?». (с)Veil
twitch  youtube
     
AdamSpencer
Новичок
*

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

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

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



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

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

Репутация: 270
Online Online

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

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


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


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

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

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

Похвалы делают людей ленивыми, ругайте друг друга. Оценку любого проекта надо начинать со слов «Так, что это за г…но?». (с)Veil
twitch  youtube
     
AdamSpencer
Новичок
*

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

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

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



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

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

Репутация: 270
Online Online

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

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


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


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 » Записан

Похвалы делают людей ленивыми, ругайте друг друга. Оценку любого проекта надо начинать со слов «Так, что это за г…но?». (с)Veil
twitch  youtube
     
AdamSpencer
Новичок
*

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

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

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



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

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

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

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

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

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



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

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

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