Pull to refresh

Comments 52

Странно, что вы не повесили флажок, что это туториал. Он вышел замечательным. Все просто, понятно и без воды.
Первым, что приходит в голову — добавить еще уровней, редактор уровней и парочку режимов.
Спасибо, рад что понравилось. Тут действительно много чего можно добавить — двойной прыжок например =).
Хороший редактор уровней есть в самом impactJs, если что
Спасибо за Ваш труд!
Для меня проявились некоторые ответы на мои вопросы.

И да, я хотел проверить в браузере какие пакеты передаются во вкладке Network, а там почему то не логируется ничего… Это из-за сокетов?
Спасибо за отзыв. А какие именно вас интересуют пакеты? те которые к signalling серверу? или которые между пирами?
Между игроками.
Я просто с коллегой в офисе тестировали и мне интересно стало ))
Вот тут я пытался проследить за обмениваемыми данными — http://s020.radikal.ru/i714/1611/9c/0931fa2cde30.png

Я так понимаю, средствами браузера это не возможно?
Да, через девтулз вы их не увидите. Можете конечно в отладчике их посмотреть, если найдете место где происходит отправка/получение, но это не удобно
Хорошая идея ;) захожу) Правда там к сожалению есть ограничение на количество игроков в комнате
Игра и правда классная. Единственное, чего хочется добавить — UI для постоянного отображения количества здоровья, патронов и фрагов. Возможно, еще показывать таблицу рекордсменов в данной комнате.

Мне кажется, или есть задержки при стрельбе? Выстрелил, и через какой то промежуток времени выстрел проигрался.

вроде никакой задержки не задумывалось. Прямо ощутимая задержка?

Да, например стреляю в игрока, он не умирает, но зато когда в движении можешь наткнуться на луч появившийся из ниоткуда (я понимаю что никакой валидации выстрелов пока нет и все этим пользуются, но тем не менее поведение выстрелов мне показалось странным).

Ну игрок умирает не с первого попадения. А лазеры в хабракомнате — это нормальное явление, со мной такое постоянно происходит, знаете ли

Там столько читерства и лагов )

Эт точно! На верхнем этаже стоит прокачанный читер с усиливающим зеркалом :)
Просто не надо в него стрелять, а так он довольно спокойный…
неплохо бы добавить разные цвета спрайтов для игроков, иногда сложно разобрать где я, а где враг
Движение камеры за вашим игроком немного помогает в этом плане, но вы правы, это добавить цвета — было бы получше.
Просто шикарно, тоже хотел попробовать WebRTC для создания сетевых игр. И кстати вопрос, есть ли готовая реализация WebRTC клиента для node.js?
Я не использовал, поэтому ничего посоветовать не могу. Но думаю должны быть

Попадетесь в то, что куча читеров будет

Не совсем понял, может комментарий не туда?
Отличная статья. Вот только не стоит доверять полученным данным, иначе появится терминатор.
Очень верное замечание, действительно нужно продумывать механизмы защиты от таких ситуаций. Но я старался осветить основы, а это уже более продвинутая тема на мой взгляд
UFO just landed and posted this here
Спасибо! Ников, скорборда, редактора карт и двойного прыжка действительно не хватает — каюсь, это потому, что, к сожалению также не хватает и времени все это сделать и пришлось остановиться на том что есть. По поводу управления — разве неудобно? мне кажется просто надо немного привыкнуть
Я вспоминал где у меня эти кнопки. В файтеры и платформеры давно не играл. Самое универсальное — стрелки или WASD. Дальше Alt, Ctrl, Shift.
Дальше Alt, Ctrl, Shift.
Подобные клавиши нужно использовать с осторожностью.
Винда не любит, когда их часто нажимают (Попробуйте быстро нажать Shift 5 раз)
Знаю это, стараюсь отключать залипание везде, где это возможно.
Ну стрелка вверх как-то попривычнее.

Давно не играл в такой лютый ламповый хардкор. Отличная статья.
Кажется кто-то нашёл способ самостоятельно генерить выстрелы и месторасположение )
Картинка того, что происходит в хабракомнате сейчас
image
Или вот к чему приводит рассчет изменений координат на клиенте без проверок на сервере )
Как я уже говорил — защита от такого — это уже тема другой статьи. Но круто что кто-то полез ковырять код и разбираться как оно там устроено. На самом деле это совсем не трудно сделать, если умеешь пользоваться отладчиком в браузере и читать код. Можно еще сделать, чтобы не умирать падая в лаву, отражать попавшие в вас пули и т д
UFO just landed and posted this here
Может тогда и двойной прыжок запилите? и скорборды…

А если передавать не позиции, а действия игрока?
"Игрок начал двигаться вправо"
"Игрок начал прыжок"
"Игрок закончил прыжок"
с добавкой в виде координат и метадаты для синхронизации
Ну и может таки отправлять периодически сообщения синхронизации


Тогда, по идее, и анимацию не надо передавать — она может обсчитываться на клиенте

Плюс передачи координат в том что они достоверно отражают вашу позицию. Действия же — отражают ее косвенно.
А в чем выигрыш такого подхода?

По идее тот, что каждый клиент может просчитывать позицию каждого игрока на поле без непрерывной "подпитки" координатами. Т.е. мы знаем, что игрок движется со скоростью V. Если от оппонента пришло событие "начал двигаться вправо", мы можем полностью просчитать его положение на основании флага движения, известной скорости и текущей координаты. Так как противник предсказуемо переместится из позиции А в позицию А + Dir V Dt. Тогда мы будем менять механику движений только при изменении "флагов движения". А вместе с командами на смену флагов можно присылать координаты точки, в которой это случилось — чтобы подкорректировать ошибки.
Т.е. мы передаём не состояния игрового мира, а события в игровом мире — что дешевле по объёму, и делать надо реже.
И интерполяция как органичное следствие, а не костыль.

В этом есть смысл, но мне сложно сказать насколько хорошо это будет на практике — я не проверял такой подход. Но не забывайте про то что мы используем UDP — что-то может не дойти, что-то прийти не в том порядке в котором вы отсылали. Что будет если сообщение в котором вы отправили начал двигаться вправо по каким-то причинам не дойдет? вы на принимающей стороне будете думать что он все еще двигается в предыдущем направлении пока не получите новый сигнал о смене движения? нужно будет что-то придумывать на этот счет
Достоверность — это всё же работа «сервера» или в вашем случае хоста. Пусть он один сможет читерить )

А вообще, если кому будет интересно, на хабре был перевод отличной статьи на тему мультиплеера в динамичных играх.

Интересно, сильно ли усложнит код подписывание сообщений и проверка их на серверсайде, чтобы читерство исключить..

Допустим, что нет сигнального промежуточного сервера. Я так понимаю, все равно возможно соединиться друг с другом, передав (например по скайпу) данные полученные от stun друг другу? Или достаточно одному выслать параметры для подключения?
Нет никаких правил по которым должен быть реализован сигналлинг — в предложенном вами примере: скайп и будет сигналлингом. Одному выслать параметры недостаточно — вам ведь нужно проверить доступность в обе стороны.
Ну задумка была такая, что вы не видите сразу всю карту. То есть вы чаще всего не знаете где ваши противники и узнаете об этом когда они уже совсем близко к вам…
парень с планшета в мобильной сети, я с корпоративной сети на работе. я создал комнату 3, дал ему ссылку, не видим друг друга. Что я делаю не так?
Скорее всего у вас в корпоративной сети есть настройки для udp которые не позволяют связаться. p2p не всегда возможен к сожалению. Для таких случаев нужно поднимать turn сервер, который будет пускать трафик через себя, но у меня его нет
Sign up to leave a comment.