Сразу поспешу порадовать о том, что проект удержался на плаву)
С первого этапа я переписал не мало, а так же уже добавил некоторые приятные вещи в игровой процесс)
Давайте я расскажу о некоторых деталях и ньюансах поподробнее...
После неудачного опыта с функцией select, я хорошенько подумал и сделал всё на событийных сокетах, а это уже WinSock2Api.
Поместил чтение дейтаграммы в отдельную нить, завёл на сервере быстрый таймер, в прогрессе которого расчитываются все координаты всех объектов на локации и в его прогрессе начал слать всем подключившимся клиентам информацию о всех объектах в игре...
Как оказалось чуть позже - напрасно...
Т.к. у таймера был SleepLength = 10, то уже с двумя клиентами он закидывал свой сокет пакетами так, что на клиентах отклик начинал увеличиваться от времени.
Я сначало даже не понял в чём дело.
И решил сделать всё намного проще, чтобы проверить теорию о перегрузке буфера сокета:
Т.к. клиент отправляет запросы пинга постоянно, то посылку всех данных с сервера я повесил как ответ на пинг клиенту, т.е. в эту же обработку.
И действительно, дело было в этом, после такой кардинальной оптимизации я даже уменьшил SleepTime на сервере и клиенте, что дало более точные расчёты на сервере и высокий FPS на клиенте.
Сразу с ходу сделал интрполяцию движений на клиенте, позвал друзей и провёл небольшой тест. И результаты оправдали ожидания) 5 кораблей летало плавно, отклик был хорошим, только у некоторых были порой большие лаги, но тут уже дело в компе-сервере, на звание которого мой комп никак не претендует)
На таких радостях я решил чуток поукрашать игру, пошёл в фотошоп рисовать огни двигателей, через некоторое время вышли довольно забавные огоньки, особенно переднии поворотники)
Ну а затем всё таки занялся такими важными деталями как уборка в коде, обход потери пакетов, оптимизация передачи данных и стрельба плазмой)
Теперь структура модулей сервера выглядит так:
Прикрутил огоньки кораблям, а потом и выстрелы шариками плазмы, что можно видеть на заглавной картинке поста - кораблик стреляет двумя шариками)
Как можно заметить уже создан класс TAsteroid, но пока что я их не ввёл в игру, для начала хочу доделать коллизию кораблей друг с другом и с плазмой.
Вообщем что по планам:
На данный момент создаётся арт к игре, я сам в предвкушении различных вкусных картинок)
С программной же части планирую реализовать следующее:
С первого этапа я переписал не мало, а так же уже добавил некоторые приятные вещи в игровой процесс)
Давайте я расскажу о некоторых деталях и ньюансах поподробнее...
После неудачного опыта с функцией select, я хорошенько подумал и сделал всё на событийных сокетах, а это уже WinSock2Api.
Поместил чтение дейтаграммы в отдельную нить, завёл на сервере быстрый таймер, в прогрессе которого расчитываются все координаты всех объектов на локации и в его прогрессе начал слать всем подключившимся клиентам информацию о всех объектах в игре...
Как оказалось чуть позже - напрасно...
Т.к. у таймера был SleepLength = 10, то уже с двумя клиентами он закидывал свой сокет пакетами так, что на клиентах отклик начинал увеличиваться от времени.
Я сначало даже не понял в чём дело.
И решил сделать всё намного проще, чтобы проверить теорию о перегрузке буфера сокета:
Т.к. клиент отправляет запросы пинга постоянно, то посылку всех данных с сервера я повесил как ответ на пинг клиенту, т.е. в эту же обработку.
И действительно, дело было в этом, после такой кардинальной оптимизации я даже уменьшил SleepTime на сервере и клиенте, что дало более точные расчёты на сервере и высокий FPS на клиенте.
Сразу с ходу сделал интрполяцию движений на клиенте, позвал друзей и провёл небольшой тест. И результаты оправдали ожидания) 5 кораблей летало плавно, отклик был хорошим, только у некоторых были порой большие лаги, но тут уже дело в компе-сервере, на звание которого мой комп никак не претендует)
На таких радостях я решил чуток поукрашать игру, пошёл в фотошоп рисовать огни двигателей, через некоторое время вышли довольно забавные огоньки, особенно переднии поворотники)
Ну а затем всё таки занялся такими важными деталями как уборка в коде, обход потери пакетов, оптимизация передачи данных и стрельба плазмой)
Теперь структура модулей сервера выглядит так:
Прикрутил огоньки кораблям, а потом и выстрелы шариками плазмы, что можно видеть на заглавной картинке поста - кораблик стреляет двумя шариками)
Как можно заметить уже создан класс TAsteroid, но пока что я их не ввёл в игру, для начала хочу доделать коллизию кораблей друг с другом и с плазмой.
Вообщем что по планам:
На данный момент создаётся арт к игре, я сам в предвкушении различных вкусных картинок)
С программной же части планирую реализовать следующее:
- коллизию
- астероиды
- GUI
- online обновление
- бонусы
А так же сделаю версию игры на TCP - это будет эпическим сравнением))
Один из важных моментов - это поиск сервера, т.к. в ходе разработки я всё яснее понимаю, что для риалтайма очень важно, что является серваком)
А пока, коллега E-Cone согласился предоставить свой не слабый комп в качестве сервака для тестов и забав)
Вот такие дела в целом, пойду трудиться дальше, до новых встреч)


Хорошо идёшь. И главное оперативно отписываешься. Удачи в разработке.
ОтветитьУдалить