Четверг, 26 Декабря 2024, 08:03

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Мультиплеер 2 игрока, сервер и клиент...
InsDesДата: Пятница, 30 Сентября 2011, 21:08 | Сообщение # 1
почетный гость
Сейчас нет на сайте
В общем с помощью встроенных функций GML хочу сделать мультиплеер на двух игроков.
Как я понимаю один пользователь должен будет создать "Сервер", другой к нему подключиться, стать "Клиентом" введя АйПи сервера.
Дело в том, что я вовсе не понимаю как происходит связь, передача данных, связывание сервера и клиента и их создание. Может кто может подкинуть простой пример, который может наглядно показать создание сервера, подключение и начало игры???


LunarPixelДата: Пятница, 30 Сентября 2011, 21:13 | Сообщение # 2
старожил
Сейчас нет на сайте
Вот, посмотри: http://zalil.ru/31787504
Откопал у себя на компе свой примерчик маленький. smile


InsDesДата: Пятница, 30 Сентября 2011, 21:34 | Сообщение # 3
почетный гость
Сейчас нет на сайте
LunarPixel, Спасибо, но почему не получается подключится? Пробовал у себя на компьютере с двумя открытыми *.exe и с другом...

LunarPixelДата: Пятница, 30 Сентября 2011, 21:37 | Сообщение # 4
старожил
Сейчас нет на сайте
InsDes, проверил, всё работает.
При подключении на одном компе не надо вводить IP.
При подключении через Интернет возможны проблемы со стандартными функциями, нужно в таком случае использовать Хамачи - эмулятор локальной сети.


InsDesДата: Пятница, 30 Сентября 2011, 21:49 | Сообщение # 5
почетный гость
Сейчас нет на сайте
LunarPixel, А как нежели через интернет? О.о

Добавлено (30.09.2011, 21:49)
---------------------------------------------
И можно поподробнее про Хамачи?! А так же как происходит передача координат серверу? С помощью какой функции и где её разумно использовать, и соответственно когда?


LunarPixelДата: Пятница, 30 Сентября 2011, 21:50 | Сообщение # 6
старожил
Сейчас нет на сайте
InsDes, ?!
Quote (InsDes)
у себя на компьютере с двумя открытыми *.exe и с другом...


У себя на компе, при двух открытых exe, не надо вводить IP, или же указывать локальный.
Через интернет с другом может не работать на стандартных функциях, потому нужен эмулятор локальной сети.


InsDesДата: Пятница, 30 Сентября 2011, 21:56 | Сообщение # 7
почетный гость
Сейчас нет на сайте
LunarPixel, Все все, я понял... Эмулятор локальной сети должен стоять только у сервера или и у клиента тоже? И почему "может"? Какие обстоятельства могут служить неработоспособностью стандартных функций... Извини если прям перегрузил вопросами... И если лучше, то может использовать 39dll???

LunarPixelДата: Пятница, 30 Сентября 2011, 22:01 | Сообщение # 8
старожил
Сейчас нет на сайте
InsDes, смотря для каких тебе целей, если просто с другом поиграть во что то простенькое, то можно и на стандартных. Если что то серьезное делаешь, то лучше 39dll.
Эмулятор должен стоять у обоих. Он создаст между вами псевдо локальную сеть и выдаст IP по которым и надо будет подключаться.
Не работать в Интернете может из за разных причин, но связаны они с провайдером. ) Как правило, если провайдер один и тот же, то можно подключиться. Иначе не получается. Во всяком случае у меня было так.


InsDesДата: Пятница, 30 Сентября 2011, 22:06 | Сообщение # 9
почетный гость
Сейчас нет на сайте
LunarPixel, Спасибо огромное за объяснение. Я думаю делать обычный логический-платформер построенный на коомперативе, чтобы поиграть с другом. Следовательно можно и на стандартных функциях управится. Теперь о функции передачи координат серверу, как я понял - это mplay_data_read(1) - что является индексом (1) и от чего он зависит?

LunarPixelДата: Пятница, 30 Сентября 2011, 22:11 | Сообщение # 10
старожил
Сейчас нет на сайте
mplay_data - это общий массив, в котором хранятся передаваемые параметры.

mplay_data_write(par,n) - записывает параметр в ячейку n
mplay_data_read(n) - считывает параметр из ячейки n

Например у клиента записывается X координата объекта: mplay_data_write(x,0)
А на сервере она считывается и присваивается объекту x=mplay_data_read(0)


InsDesДата: Пятница, 30 Сентября 2011, 22:15 | Сообщение # 11
почетный гость
Сейчас нет на сайте
LunarPixel, Просто у меня развилось мнение\ощущение, что например если объект совершил действие (x-=1) то после этой функции нужно вписать функцию, которая передаст информацию серверу, то есть:
Если нажата_клавиша('W') {прыжок; передача серверу}
Поэтому я слегка не понимаю... surprised




Сообщение отредактировал InsDes - Пятница, 30 Сентября 2011, 22:16
LunarPixelДата: Пятница, 30 Сентября 2011, 22:18 | Сообщение # 12
старожил
Сейчас нет на сайте
можно каждый шаг передавать координаты объект от сервера клиенту и наоборот.

Например, у тебя на клиенте есть obj_hero.
На сервере есть obj_hero_clirent

Объекту obj_hero задаешь управление и в step пишешь:
mplay_data_write(x,0)
mplay_data_write(y,1)

А объекту obj_hero_clirent на сервере в step пишешь:
x=mplay_data_read(0)
y=mplay_data_read(1)

Таким образом при движении объекта obj_hero на стороне клиента, объект obj_hero_clirent будет двигаться точно так же на стороне сервера.


AGENTX001Дата: Пятница, 30 Сентября 2011, 22:19 | Сообщение # 13
почётный гцупер
Сейчас нет на сайте
InsDes, LunarPixel, лично моё ИМХО 39dll проще=)
InsDesДата: Пятница, 30 Сентября 2011, 22:26 | Сообщение # 14
почетный гость
Сейчас нет на сайте
То есть ...write передает информацию от клиента к серверу, а ...read наоборот, от сервера к клиенту, так???


LunarPixelДата: Пятница, 30 Сентября 2011, 22:29 | Сообщение # 15
старожил
Сейчас нет на сайте
AGENTX001, очень полезная информация, спасибо. smile
Если уж решил написать что то, то укажи хоть в чем принципиальная разница в освоении, в чем простота?! smile

InsDes, нет. Write записывает информацию в общий массив. А read считывает информацию из общего массива.
Разбери пример, перечитай ещё раз что я написал и поэкспериментируй. smile

От клиента записал данные, на сервере считал.
На сервере записал данные, на клиенте считал.


InsDesДата: Пятница, 30 Сентября 2011, 22:38 | Сообщение # 16
почетный гость
Сейчас нет на сайте
LunarPixel, Ааа... Все дошло... ^^ Радуйся за меня, сенсей! biggrin
В общем все опишу на картинке:


LunarPixelДата: Пятница, 30 Сентября 2011, 22:39 | Сообщение # 17
старожил
Сейчас нет на сайте
InsDes, да, всё правильно happy

InsDesДата: Пятница, 30 Сентября 2011, 22:42 | Сообщение # 18
почетный гость
Сейчас нет на сайте
Теперь же если мне нужно передать угол, как в tds (к примеру), то необходимо:
image_angle=point_direction(mplay_data_write(1,x),mplay_data_write(2,x), mouse_x, mouse_y)
А у другого считывать в шаге:
obj_player1.x=mplay_data_read(1)
obj_player1.y=mplay_data_read(2)

smile Или не верно?


LunarPixelДата: Пятница, 30 Сентября 2011, 22:45 | Сообщение # 19
старожил
Сейчас нет на сайте
InsDes, проще записать угол, как и координаты:
mplay_data_write(3,image_angle)
И считывать его. smile


InsDesДата: Пятница, 30 Сентября 2011, 22:46 | Сообщение # 20
почетный гость
Сейчас нет на сайте
LunarPixel, А как быть с переменными?

  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг