|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
30.05.2017, 23:54 | #51 |
Форумчанин
Регистрация: 11.04.2015
Сообщений: 221
|
|
19.12.2020, 01:19 | #52 | |
Старожил
Регистрация: 02.01.2011
Сообщений: 3,327
|
Ничего себе! Значит, перед тем, как я забросил эту игру, в мае 2017, у меня были наброски на WebGL-движке Phaser, где я реализовал механику движения танчика. Демку можно запустить в браузере по ссылке: https://8observer8.bitbucket.io/Phaser/BattleCity/dist/
Цитата:
А это уже вариант. Надо было делать мне привязку к DeltaTime. На WebGL/JavaScript и на OpenGL/Qt/C++ это проблемы не будет. После большого перерыва возвращаюсь к написанию клона Battle City по сети. Многие вещи глобально переосмыслил. Одно время была мысль, что выгодно взять Unity и C#, а ещё также реализовать версию на C# и OpenGL, чтобы за одно тренироваться с C# и практиковаться с шейдерами на чистом OpenGL. Но всегда зудела мысль, что C++ быстрее. Чистый C++ не так удобен, как C#, но зато есть такой же удобный Qt C++. Qt C++ гораздо более удобный для OpenGL, чем C#, потому что на C# нужно использовать отдельную библиотеку OpenTK от группы энтузиастов, а Qt включает в себя поддержку OpenGL на официальном уровне. Qt включает в себя: парсеры Json/Xml, загрузку текстур, матрицы, сеть, базы данных и многое другое. По Qt много вакансий и поэтому на него выгодно тратить время в отличие от других библиотек для окон: GLFW, SDL2 и т.д. Это сугубо моя точка зрения. На Qt можно легко собирать в APK и под Android и iOS. Второй важный момент - это версии игр для веб на WebGL, чтобы была возможность запустить игру в один клик прямов в браузере, без скачиваний, проверок на вирус, распаковок и т.д. Если кто-то захочет начать изучать шейдерный OpenGL и WebGL, то советую начать с этой книги: WebGL. Программирование трехмерной графики | Мацуда Коичи, Ли Роджер. Здесь примеры: Небольшие примеры на WebGL Игра должна быть в трёх версиях: Desktop, Mobile и Web. В Qt встроена поддержка вебсокетов. Сервер я буду писать на Node.js с хостингом на бесплатном Heroku. Для сервера я использую пакет для вебсокетов: https://www.npmjs.com/package/ws Этот пакет очень популярен - за неделю более 35 млн. установок. Для упаковки спрайтов в текстурный атлас я использую Texture Packer Pro. Я купил эту программу несколько лет назад. Это программа упаковывает спрайты на атлас и генерирует два файла: атлас (png) и данные о спрайтах (.json). В JSON хранятся характеристики спрайтов: координаты на атласе, ширина, высота и т.д. Парсер JSON встроен в Qt и в JavaScript. Оставлю здесь полезный пример парсинга JSON на Qt из консольного приложения: Входной файл: Person.json Код:
Код:
"John" "Smith" "212 555-1234" Последний раз редактировалось 8Observer8; 19.12.2020 в 01:23. |
|
19.12.2020, 01:28 | #53 |
Старожил
Регистрация: 02.01.2011
Сообщений: 3,327
|
TexturePacker оказывается написан на Qt:
09a8828b-7939-4ca8-ae07-ae197d406545.png Я создал Sprite Sheet следующим образом. Нашёл в интернете набор тайлов игры (Tile Set). Нарезал в GIMP спрайты: 47b0af58-e8c3-4168-8ff7-2f001d72ee35.png Эти спрайты перенёс мышкой в TexturePacker: c07ec43a-c371-454d-9445-360d91d9c161.png TexturePacker упаковал спрайты в один Sprite Sheet. Я нажал кнопку "Publish sprite sheet" и было сгенерировано два файла: сам Sprite Sheet, в виде png-файла, и файл json, по которому можно узнать текстурные координаты и размеры спрайтов: b08e7f08-a80a-4f07-97a7-e00ce5f0e4af.png Код:
|
19.12.2020, 01:29 | #54 | |
Старожил
Регистрация: 02.01.2011
Сообщений: 3,327
|
Пример кода, как из JSON-файла выше (то есть из файла описания Sprite Sheet, который хранит описания фреймов и другую информацию) извлечь размеры Sprite Sheet. Эти размеры нужны, чтобы пересчитать текстурные координаты. OpenGL будет воспринимать текстуру, как квадрат 1x1 юнитов.
Код:
Цитата:
|
|
19.12.2020, 01:32 | #55 | |
Старожил
Регистрация: 02.01.2011
Сообщений: 3,327
|
Кроме сохранения в JSON, TexturePacker умеет сохранять Sprite Sheet в XML. В Qt из коробки есть модуль для работы с XML, как и с JSON. Модуль подключается в файле pro: QT += xml
Тоже самое, что и сообщением выше, но загрузка Sprite Sheet из XML. Комментарии в XML не я писал, они сами генерируются в TexturePacker. За одно у меня в коде происходит перевод пиксельных координат спрайта в текстурные координаты: ea2ba7cc-5bb2-4b14-9e75-e4002f881ac0.png Код:
Код:
Цитата:
|
|
28.12.2020, 02:40 | #56 |
Старожил
Регистрация: 02.01.2011
Сообщений: 3,327
|
Самый простой (из известных мне) и бесплатный способ соединиться с удалённым сервером - это писать сервер с использованием Node.js/Express/WebSocket и использовать хостинг на Heroku или OpenShift. Официальная пошаговая инструкция для развёртывания на Heroku: Getting Started on Heroku with Node.js
Пример, в котором после соединения клиента с сервером - клиент и сервер выводят сообщения о соединении на экран. Используется бесплатный тариф, поэтому сервер засыпает если им не пользуются 30 минут, а чтобы разбудить, нужно подождать 10-15 секунд.
Содержимое архива desktop-клиента, собранного в релиз для Windows на Qt C++: c9e9a689-7818-48c4-bfe6-85ed1276609b.png Результат работы desktop-клиента на Qt C++: 80e5afbe-68fc-44f2-87cf-e70b17ba8f1e.png Для отладки и релиз нужно на web-клиенте и на desktop-клиенте раскомментировать и закомментировать соответствующие строки: На веб-клиенте: Код:
Код:
Исходники web-клиента и сервера: src/client/main.js Код:
Код:
Код:
Код:
Код:
Код:
Код:
main.cpp Код:
Код:
Код:
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Создание мультиплеера для GTA Vice City Mobile | Kenix | Мобильные ОС (Android, iOS, Windows Phone) | 0 | 04.05.2013 15:13 |
Создание онлайн игры на движке Unity | Entaro | Фриланс | 4 | 30.09.2010 10:03 |
Танчики | PVD | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 24 | 10.01.2010 21:25 |
Battle City | NightWolfin | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 0 | 17.05.2009 13:38 |
Ошибка в прорисовке карты для игры в танчики | NSvirus | Паскаль, Turbo Pascal, PascalABC.NET | 1 | 27.02.2009 21:08 |