|
3 / 3 / 0
Регистрация: 14.07.2012
Сообщений: 86
|
|
Подскажите какие технологии лучше использовать19.08.2022, 13:26. Показов 4355. Ответов 36
Метки нет (Все метки)
Здравствуйте! У меня есть игра , которую я написал на C++/SFML , игра простая головоломка вроде тетриса.
У меня есть задача "запихнуть" эту игру на сайт, что бы играть в нее из браузера. Какие технологии лучше для этого использовать?
0
|
|
| 19.08.2022, 13:26 | |
|
Ответы с готовыми решениями:
36
С чего начать написание стратегической игры и какие технологии использовать? Какие библиотеки OpenGL лучше использовать с VB.NET и в чем разница? Какие ЯП, IDE, фреймворки, технологии лучше использовать для преподавания начинающим программистам? |
| 22.08.2022, 16:52 | |
|
Скачайте и установите программу Free Texture Packer (сайт недоступен на территории РФ, надо ставить VPN, у меня плагин для браузера VeePN). Когда запустите программу, то увидите прямоугольную область слева с надписью "drag'n'drop images here":
В эту область нужно перетащить все свои спрайты для игры: В настройках справа нужно выставить следующие значения (в "Save path" указать путь к папке: "public\assets"): Нажмите кнопку "Export". В папке ""public\assets"" вы увидите два файла: "texture.png" и "texture.json". В "texture.png" упакованы все спрайты, а в "texture.json" находятся данные - имена спрайтов, их координаты на текстурном атласе (то есть в файле "texture.png") и ширина спрайтов. Данные из "texture.json" надо использовать, как текстурные координаты для игровых объектов. Координаты и ширина спрайтов даны в пикселях и чтобы их перевести в текстурные координаты нужно будет делить их на ширину и высоту "texture.png", то есть нормировать на единицу.
0
|
|
| 22.08.2022, 17:04 | |||||||||||
|
В моём случае размер файла "texture.png" получился равным 1024x512:
Данные о размере ("w" и "h") можно найти в файле "texture.json" в разделе "meta". Кстати, в JS уже встроен парсер JSON, поэтому никаких библиотек для работы с JSON подключать не нужно:
0
|
|||||||||||
| 22.08.2022, 17:39 | |||||||||||
|
Пример, как загрузить "texture.json" и "texture.png". Пример выводит размер "texture.png" путём парсинга JSON:
0
|
|||||||||||
| 22.08.2022, 18:55 | |||||||||||||||||||||||||||||||
|
Для шейдеров лучше всего иметь отдельные файлы, я обычно называю их "default.vert" и "default.frag". Для VSCode есть расширение Shader languages support for VS Code для подсветки синтаксиса языка GLSL.
Инициализацию контекста и создание шейдерной программы лучше убрать в отдельные файлы. Получится такая структура проекта:
index.html
0
|
|||||||||||||||||||||||||||||||
| 22.08.2022, 21:35 | ||||||||||||||||||||||||||
|
Пример отрисовки игровых объектов загруженных из Free Texture Packer. Парсим "texture.json". Получаем ширину и высоту "texture.png". Получаем размеры игровых объектов:
0
|
||||||||||||||||||||||||||
| 22.08.2022, 21:46 | |||||||||||||||||||||||||||||||||||||||||
public/index.html
0
|
|||||||||||||||||||||||||||||||||||||||||
| 23.08.2022, 11:18 | ||||||||||||||||||||||||||
|
Организация gameLoop с помощью requestAnimationFrame
Для того чтобы организовать gameLoop можно использовать requestAnimationFrame, которая будет вызывать функцию gameLoop примерно 60 раз в секунду в примере ниже:
Класс для работы с клавиатурой Я хочу создавать браузерные 2D/3D игры с мультиплеером, поэтому изучаю это туториал: Real Time Multiplayer in HTML5. Это лучшее, что я находил по теме игр с мультиплеером. В этом туториале объясняется работа демки, которую я развернул на Heroku: http://battle-world.herokuapp.com/?debug Можете в двух вкладках браузера её потестить. У неё лобби так устроено, что автоматически создаётся новая игра для двух новых игроков. В исходниках этого примера на GitHub из статьи есть класс для работы с клавиатурой: keyboard.js. Я сделал очень укороченную версию: keyboard.js
0
|
||||||||||||||||||||||||||
| 23.08.2022, 13:09 | ||||||||||||||||||||||||||||||||||||
|
Создание игрового уровня с помощью программы Tiled Map Editor
Скорее всего, в вашей игре "простая головоломка вроде тетриса" не нужно расставлять статические объекты по уровню, а может быть нужно. Может быть потом вам нужно будет создавать уровни. Есть очень популярная бесплатная программа Tiled Map Editor (сокращённо - Tiled), которая позволяет создавать уровни для любых движков и фреймворков: SFML, Phaser, Pixi.js, Unity и т.д., а также для игр, создаваемых без игровых движков и фремворков. Это очень полезная технология, которая поможет сократить время создания игры. Я взял ассеты для игры из сообщений выше из книги по Phaser: "Discover Phaser", автора Thomas Palef. В этой книге объясняются основы Tiled на примере простой игры в жанре платформер, ассеты из которой вы видели из сообщений выше. Я нарисовал с помощью Tileset уровень, как в книге: По нарисованному уровню я создал прямоугольники на "Object Layer" и подписал их "Static" и "Hole": Эти прямоугольники я экспортировал в JSON: "File" > "Same As..." > выбрал JSON. Получил имена прямоугольников, их координаты координаты и размеры:
Добавил парсинг этих объектов в файл vertex-buffers.js:
0
|
||||||||||||||||||||||||||||||||||||
| 23.08.2022, 13:30 | ||||||||||||||||||||||||||||||||||||||||||||||
|
Демка к сообщению выше:
index.html
1
|
||||||||||||||||||||||||||||||||||||||||||||||
|
3 / 3 / 0
Регистрация: 14.07.2012
Сообщений: 86
|
|
| 28.08.2022, 04:29 [ТС] | |
|
8Observer8, спасибо большое, все ваши сообщения я внимательно читаю, и на всякий случай даже сохраняю в PDF, вы мне очень помогли! Еще раз спасибо!
1
|
|
| 28.08.2022, 15:58 | ||||||||||
|
Спасибо! Очень приятно. Я у меня есть один подарок для вас. Вам нужно будет совершить всего несколько простых действие, а эффект будет значительный. Речь пойдёт об использовании TypeScript вместо JavaScript. TS включает в себя JS, добавляет в JS типы, проверку типов, enum, модификаторы доступа класса: public/private/protected, ключевое слово interface, то есть "контракт", как в C# и других языках, и многое другое. Одно из самых лучших добавлений - будет нормальный IntelliSense, то есть автодополнение кода в VSCode. Надеюсь, вы уже установили VSCode и Node.js. Я сделал маленький пример, который вы можете копировать для новых проектов и писать сразу на TS без каких-либо лишних действий.
Скачайте пример: typescript-webgl-example.zip (259.8 Кб) Установите эти пакеты глобально командой в консоли (это нужно сделать только один раз):
В папке примера, где лежит "package.json" нужно ввести команду для установки локально модулей перечисленных в "package.json" (это нужно делать для каждого нового проекта):
Запустится два терминала. В левом терминале нужно набрать команду "npm run dev", а в правом "http-server -c-1": Перейдите в браузер. Откройте в браузере консоль разработчика, в Chrome: Ctrl+Shift+J. Наберите в адресной строке браузера: localhost:8080 и вы увидите вывод программы на TS в консоль браузера. Для сборки в Release, с сжатием bundle.js с помощью библиотеки UglifyJS нужно завершить работы левой консоли с Parcel, нажав кнопку с корзиной справа от терминалов: Нужно снова нажать "Split Terminal" и ввести команду: npm run release Теперь вы можете закинуть папку "public" на какой-нибудь хостинг, например, на бесплатные GitHub Pages или Heroku. На Heroku можно сделать серверную часть с базой данных и веб-сокетами, а на GitHub Pages нельзя писать свою серверную часть. Вывод примера в консоль браузера: Что делает пример:
1
|
||||||||||
|
3 / 3 / 0
Регистрация: 14.07.2012
Сообщений: 86
|
|
| 01.09.2022, 15:57 [ТС] | |
|
8Observer8, Спасибо, теперь мне не придется начинать с чистого листа, и задача теперь не кажется нерешаемой, спасибо за то что уделили мне такое огромное время!
1
|
|
| 01.09.2022, 18:58 | |
|
dnscheb, начните писать свой код на JS (конечно, копируйте и мой код тоже) прямо в браузере в этой песочнице: https://plnkr.co/ Туда можно закинуть звуки и спрайты. Например, сделайте, чтобы один из ваших спрайтов выводился на экран и проигрывался один из звуковых файлов. Сохраните проект в песочнице и скиньте ссылку на него здесь в этой теме. Лучше если вы загрузите текстурный атлас и json-файл к нему, созданные с помощью Free Texture Packer, как я показал в этом сообщении. Наверняка ваши спрайты имею размеры некратные двойки в какой-то степени, а WebGL 1.0 умеет работать только с такими спрайтами, чтобы и ширина и высота были кратными двойки в какой-нибудь степени, а в Free Texture Packer есть галочка "Power of two". Если возникнет проблема, например, спрайт не рисуется, то тем более публикуйте на https://plnkr.co/ я найду проблему.
0
|
|
|
3 / 3 / 0
Регистрация: 14.07.2012
Сообщений: 86
|
|
| 01.09.2022, 19:11 [ТС] | |
|
8Observer8, мне потребуется время на изучение JS, я его уже начал изучать
0
|
|
| 01.09.2022, 19:45 | ||||||||||||||||||||||||||
|
dnscheb, изучайте прямо во время переписывания игры. Не надо ждать начала работы, пока прочитаете книгу. В нём такие же конструкции, как на С++: if, for, while и т.д. Если что-то непонятно, можно как справочник использовать туториал Метанита: https://metanit.com/web/javascript/ Да, я понимаю, HTML5-теги в новинку.
Например, есть задача. Нужно вывести холст размером 300x300 закрашенный зелёным цветом. Эта задача решена у меня в примерах выше. Вы заглядываете в index.html. Видите, как создаётся холст заданного размера. Лучше смотреть на код, запоминать и пытаться написать самому в https://plnkr.co/, тогда со временем он запомнится и вы не будете тратить лишнее время на поиск в каком проекте он у вас был. Я открыл https://plnkr.co/ написал:
Вторая строка выводит значение id, которое равно "renderCanvas":
Будет создан архив, который я прикрепляю к сообщению:
0
|
||||||||||||||||||||||||||
|
3 / 3 / 0
Регистрация: 14.07.2012
Сообщений: 86
|
|
| 01.09.2022, 20:07 [ТС] | |
|
8Observer8, ок, попробую
0
|
|
| 23.10.2022, 22:03 | ||||||||||
|
Пример из сообщения #29 переделал под Rollup. Rollup позволяет собирать в один файл bundle.js, который можно сжать с помощью Uglify. Для запуска примера нужно установить Node.js, а далее установить следующие пакеты глобально с помощью пакетного менеджера NPM, который установится вместе с Node.js:
Если ввести команду:
А ещё убрал зависимость от устаревших библиотек Preload.js и Sound.js. Заменил Preload.js на fetch, а Sound.js можно заменить на Web Audio API Демка в песочнице
0
|
||||||||||
| 23.10.2022, 22:03 | |
|
Какие технологии использовать для работы с XML Какие технологии подойдут лучше всего для связки JS и mySQL? Какие технологии нужно использовать в клиент-серверном приложении
Подскажите, какие технологии понадобятся? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Сукцессия 20. Война автоботов. Делаем ставки. Лёд против "пш-пш!".
anaschu 11.07.2026
Битва ИИ в ризосфере: Как мы скрестили жесткие ОДУ, закон Фика и «подземный шантаж»
Уважаемые коллеги!
Хочу поделиться уникальным опытом ведения междисциплинарной компьютерной разработки. Прямо. . .
|
Сукцессия 19. Какие выводы я сделал из модели? Часть 2.Внутримикоризный стехиометрический буфер и хроно-дискретные зоны экспансии
anaschu 11.07.2026
Био-Инженерный Ликбез: Архитектура Модели Ризосферы
Математический аппарат моделирования
|
Сукцессия 18. Какие выводы я сделал из войны грибов с деревьями? Часть 1- рассказ и немного про термины
anaschu 11.07.2026
Био-Инженерный Ликбез: Архитектура Модели Ризосферы
Математический аппарат моделирования
Система ОДУ описывает динамику изменения массы различных компонентов системы во времени. Ключевой. . .
|
Просветление в 5 секунд
kumehtar 10.07.2026
Андрей Веретенников выдал фразу недавно: "Вам не обязательно кем-то себя считать"
|
|
Эксперимент с картинкой-обложкой на CodinGame
Adler 10.07.2026
Решил на днях провести эксперимент. У меня есть аккаунт на CodinGame, ТОП-3 по РФ среди 2200 участников (в разделе соревнования по программированию ИИ-ботов). Там есть обложка, куда можно влепить. . .
|
GitDOS: Когда я решил скрестить MS-DOS, GitHub и Claude
MaGz GoLd 08.07.2026
Привет, Киберфорум! Хочу поделиться своим проектом, который, надеюсь, вас заинтересует. GitDOS — это веб-приложение, которое позволяет запускать DOS в браузере с тремя крутыми фичами: диски живут в. . .
|
Учебный мини "цифровой двойник" = (Сервер = Java + Flask_питон )+(3D = Гугловскаая 4T nvideo + google colab) +( WMS = Odoo на Docker)
anaschu 07.07.2026
Увидел в требованиях к вакансии создателя имитационных моделей связку (REst + Api + WMS + Anylogic + питон + 3D Nvideo), и решил посмотреть, что это такое. Из этого всего я работал более менее. . .
|
Море в объективе
kumehtar 06.07.2026
Хотел написать много проникновенных слов, но передумал.
Оно само - говорит.
Кто слышит тот слышит.
|