102 / 93 / 36
Регистрация: 01.04.2013
Сообщений: 649
1

Nodejs + socket.io полёт снаряда

30.07.2016, 11:22. Показов 660. Ответов 9
Метки нет (Все метки)

В игре персонаж может стрелять. Но снаряд летит не мгновенно и по кривой траектории.
Как лучше рассчитывать его месторасположение?
На клиенте через setInterval или же лучше расчёт делать на сервере, а клиенту только посылать месторасположение снаряда с интервалом, к примеру, 0.01 сек?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.07.2016, 11:22
Ответы с готовыми решениями:

Nodejs net socket server and android socket client
Добрый день Форумчане нужно помощь гуру! Решил с другом написать сервер на ноде с использование...

Прокси Socket.IO NodeJS
Всем доброго времени суток! Необходимо реализовать следующие: (картинка в аттаче) Другими словами...

Чат на nodejs + socket.io
Всем привет, возникла необходимость сделать простенький чатик. Решил сделать на nodejs немного...

Nodejs + Socket.Io Безопасное Подключение
Есть сервер Nodejs который слушает порт по Socket.io var io = require('socket.io').listen(8300);...

9
Coding is art
Эксперт JS
523 / 412 / 148
Регистрация: 04.09.2013
Сообщений: 1,044
30.07.2016, 20:45 2
Привет, посылать клиенту с интервалам в 1 сотую секунды не получиться технически.. т.к. время на то что бы дойти пакету нужно намного дольше ( зависит от пинга, в среднем 30 млс ) + время на то, что бы раскодировать данные ( в socketio это делается json.parse ) ( ~ 1-10 млс ) ( хотя если отправляешь большой объём данных то может и дольше ).
Я бы делал это на клиенте, т.к. сама анимация полёта ничего не решает ( т.е. даже если и взламают, то ничего кроме как ускорить или замедлить ( при условии что ничего больше и не происходит ) не смогут ), а вот на момент отправки запускать на сервере ( грубо говоря ) setInterval и по завершению - отправлять данные о сбитом объекте.
Про setInterval - лучше использовать 1-н глобально, в котором будет всё просчитываться ( либо выноить в форки ) т.к. большое кол-во интервалов намного больше загружать цпу, чем 1-н, но с большой логикой.
1
102 / 93 / 36
Регистрация: 01.04.2013
Сообщений: 649
30.07.2016, 20:54  [ТС] 3
Цитата Сообщение от muxahuk1214 Посмотреть сообщение
Про setInterval - лучше использовать 1-н глобально, в котором будет всё просчитываться ( либо выноить в форки ) т.к. большое кол-во интервалов намного больше загружать цпу, чем 1-н, но с большой логикой.
Как я понял запускать интервал на сервере и на клиенте. На клиенте анимация выстрела, но расчёт коллизии делать на сервере и возвращать результат попадания.
0
Coding is art
Эксперт JS
523 / 412 / 148
Регистрация: 04.09.2013
Сообщений: 1,044
30.07.2016, 20:58 4
да, так, на мой взгляд, будет правильнее.
1
102 / 93 / 36
Регистрация: 01.04.2013
Сообщений: 649
30.07.2016, 21:06  [ТС] 5
Цитата Сообщение от muxahuk1214 Посмотреть сообщение
да, так, на мой взгляд, будет правильнее.
А ещё вопрос такой. Если произойдёт рассинхронизация между полётом пули на клиенте и сервере. Допустим, на клиенте анимация пули уже подойдет к цели, а на сервере нет. Либо наоборот. Ну всякие могут быть причины, лаги, тормоза сервера или наоборот у клиента браузер сам начнёт притормаживать.
Так как быть в такой случае?
0
Coding is art
Эксперт JS
523 / 412 / 148
Регистрация: 04.09.2013
Сообщений: 1,044
30.07.2016, 22:12 6
она в любом случае будет рассинхронизирована.. после запуска на клиенте интервала нужно будет отправить на сервер то бы он начал.. это займёт время и пока сервер примит и обработает пройдёт ещё.. начнёт позже, чем клиент... и это всё ещё зависит от скорости интернета клиента..
Решить такую проблему нельзя и стоит понять, что синхронно в такой связки ничего происходить не будет.
Можно, конечно отправлять на полпути ( сервера ) данные клиенту, что полпути пройдено и отодвигать на полпути у клиента типо синхранезуя, но я бы, скорее всего, на этот счёт не запаривался...
1
102 / 93 / 36
Регистрация: 01.04.2013
Сообщений: 649
31.07.2016, 12:01  [ТС] 7
А объект "Снаряд/Пуля" лучше сделать принадлежащим персонажу или игровой карте?
0
Coding is art
Эксперт JS
523 / 412 / 148
Регистрация: 04.09.2013
Сообщений: 1,044
31.07.2016, 12:05 8
На сервере конечно персонажу, т.к. там зависимости от того, кто выстрелил важны, а на клиенте - можно и карте ( главное задать начало и конец ).. тут уже на ваше усмотрение если честно.. т.к. 1-у и ту же задачу можно решить несколькими способами..
1
102 / 93 / 36
Регистрация: 01.04.2013
Сообщений: 649
31.07.2016, 12:14  [ТС] 9
Цитата Сообщение от muxahuk1214 Посмотреть сообщение
На сервере конечно персонажу, т.к. там зависимости от того, кто выстрелил важны
Да я про сервер. Думал как лучше сделать: у класса персонажа сделать ещё одно поле, содержащее запущенные снаряды, или сделать у класса игровой карты поля, содержащее массив снарядов, а у каждого снаряда просто задать номер игрока, который выпустил этот снаряд.
0
Superposition
949 / 615 / 256
Регистрация: 27.10.2013
Сообщений: 2,084
31.07.2016, 16:27 10
Firework, http://portal.bluejack.binus.a... serverside
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.07.2016, 16:27

Полет снаряда
Здравствуйте, нужна помощь по написанию программы в среде Делфи. Тема: Расчет траектории полета...

Смоделировать полёт снаряда во времени
Есть программа, которая выдаёт график траектории полёта при заданных условиях: начальная скорость и...

Полет снаряда под углом к горизонту
Подскажите пожалуйста по каким формулам летит снаряд под углом к горизонту (нужно написать...

Вычислить расстояние полёта снаряда по углу возвышения ствола и начальной скорости полёта снаряда
Стрельба из гаубицы. Дан угол возвышения ствола а и начальная скорость полёта снаряда. v км/ч....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru