Создание игры "Battle City" (танчики) на BGE26.02.2015, 15:44. Показов 17836. Ответов 56
Метки нет (Все метки)
Привет!
Хочу написать танчики на BGE с целью лучше узнать API движка. До применения API и Python пока далеко. Проблема в самом начале: не могу придумать, как сделать анимацию движения танка на спрайтах. Могу наложить текстуру и двигать площадку, а вот как менять текстуры и организовать удобно всё это - ума не приложу. Хочу делать сначала на Logic Bricks, а потом писать на Python, но только то, что действительно проще на нём (или только эта возможность и есть) Я записал небольшое видео. Мне кажется, уже на этапе, показанном в видео, много ошибок. Посмотрите, пожалуйста: Battle City in BGE. Attempt number 1
0
|
|
| 26.02.2015, 15:44 | |
|
Ответы с готовыми решениями:
56
Как написать Battle city (танчики) Танчики (battle city) в windows forms Есть библиотеки для создания 2D игр? Таких как танчики (Battle City) или Марио? |
|
58 / 57 / 15
Регистрация: 15.09.2012
Сообщений: 557
|
|
| 09.01.2017, 21:17 | |
|
Fulcrum_013, это тоже по сути не решает проблемы - тут две стороны при большом пинге : или более реальное положение обьектов и хуже сглаживание или хорошее сглаживание и больший промах в реальном положении игрока. там где недопустимо переезд игрока дальше реального положение, например на сервере игрок подошел к обрыву а на клиенте он упадет, там всегда будут рывки.
0
|
|
| 09.01.2017, 22:04 [ТС] | ||
|
Добавлено через 8 минут Я узнал, что она сделана на бесплатном html5 игровом движке PlayCanvas. А на сервере игра использует бесплатный игровой сервер на Node.js (с открытыми исходниками), который называется Colyseus
0
|
||
|
58 / 57 / 15
Регистрация: 15.09.2012
Сообщений: 557
|
|
| 09.01.2017, 22:20 | |
|
8Observer8, если по самой игре - то все сделано на высоком уровне) по поводу синхронизации, иногда если присмотреться то вижу рывки даже на своем танке - это особенно если двигаться по прямой линии, то есть при команде на движение сервер вычисляет положение, присылает клиенту и только потом клиент двигается в эту точку.
1
|
|
|
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
|||
| 09.01.2017, 22:32 | |||
|
Добавлено через 7 минут
0
|
|||
| 09.01.2017, 22:45 [ТС] | |||
|
Добавлено через 3 минуты Добавлено через 2 минуты А нет, вот исходники движка: https://github.com/playcanvas/engine Но всё равно, в таких движках физический движок описан только на уровне документации и обычно мало кто лезет. Вот тут в документации описано, что представляет физический движок: http://developer.playcanvas.co... l/physics/
0
|
|||
|
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
|||
| 09.01.2017, 23:39 | |||
|
Добавлено через 12 минут
1
|
|||
| 17.01.2017, 00:37 [ТС] | |
|
ASDFD12, я воспроизвёл дизайн вашей карты. Пока без мультиплеера, танк едет поверх блоков, можно только осмотреть карту: https://tanks2d.herokuapp.com/
Правда, там нескольких блоков не хватает, потому что пока я делал скриншоты кто-то заходил, портил, и мой танк пытался взорвать ![]() Заодно познакомился, как использовать совместно Tiled Map Editor, Phaser+TypeScript, Texture Packer. Для Unity пришлось активировать триал версию на 7 дней для Texture Packer Pro. Из Tiled экспортировал в csv формат, а по нему уже раставляю префабы в Unity. А так очень удобные инструменты. Позволяют быстро создавать карты и отделить работу Левел Дизайнера и программиста. Хочу купить Texture Packer Pro + есть бесплатный экспортёр в Unity на Asset Store. Texture Packer Pro стоит в районе 2000 рублей. Очень удобный и эффективный инструмент для Unity. Я больше сосредоточусь на Unity + UNet, так как в Phaser уйдёт больше времени и UNet мне понравился. Он больше подходит для такого типа игр и в нём как раз можно делать комнаты на небольшое кол-во человек, не больше 20.
0
|
|
|
58 / 57 / 15
Регистрация: 15.09.2012
Сообщений: 557
|
|
| 17.01.2017, 10:35 | |
|
8Observer8, жду тогда мультиплееп) неплохой подход для редизайна. Texture Packer Pro можно спокойно заменить стандартным юнитивским sprite editor, он также прекрасно делает атласы. А UNet фри лицензия только 20 коннектов.
0
|
|
| 17.01.2017, 12:25 [ТС] | ||||
|
Я пробовал тестить UNet. Меня удивило, что даже с моим пингом в 150 мс движения довольно плавные. Причём, я пробовал ставить в настройках отправку синхронизирующих сообщений с частотой 9 и 16 пакетов в секунду, всё равно работает одинаково замечательно.
0
|
||||
|
58 / 57 / 15
Регистрация: 15.09.2012
Сообщений: 557
|
|||
| 17.01.2017, 12:36 | |||
|
Добавлено через 4 минуты
0
|
|||
| 18.01.2017, 14:35 [ТС] | ||
Да, в Unity ещё есть свой встроенный упаковщик (Window->Sprite Packer). Но есть проблема блидинга (просвет и засветка между тайлами), её можно решить только если добавить обводку в хотя бы один пиксель вокруг каждого тайла. Раньше я это делал с помощью плагина GIMP (перед тем как нашёл этот плагин - написал свой на Python), а Texture Packer Pro добавляет их сам:
0
|
||
| 17.12.2020, 12:20 [ТС] | |||||||||||
|
После большого перерыва возвращаюсь к написанию клона 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.js
main.cpp
"John" "Smith" "212 555-1234"
0
|
|||||||||||
| 17.12.2020, 15:41 [ТС] | ||||||
|
TexturePacker оказывается написан на Qt:
Я создал Sprite Sheet следующим образом. Нашёл в интернете набор тайлов игры (Tile Set). Нарезал в GIMP спрайты: Эти спрайты перенёс мышкой в TexturePacker: TexturePacker упаковал спрайты в один Sprite Sheet. Я нажал кнопку "Publish sprite sheet" и было сгенерировано два файла: сам Sprite Sheet, в виде png-файла, и файл json, по которому можно узнать текстурные координаты и размеры спрайтов:
0
|
||||||
| 17.12.2020, 16:05 [ТС] | |||||||
|
Пример кода, как из JSON-файла выше (то есть из файла описания Sprite Sheet, который хранит описания фреймов и другую информацию) извлечь размеры Sprite Sheet. Эти размеры нужны, чтобы пересчитать текстурные координаты. OpenGL будет воспринимать текстуру, как квадрат 1x1 юнитов.
0
|
|||||||
| 19.12.2020, 00:54 [ТС] | |||||||||||||||||
|
Когда из JSON загружаются танчик игрока, как в примере выше, то нужно подключить библиотеки:
Тоже самое, что и сообщением выше, но загрузка Sprite Sheet из XML. Комментарии в XML не я писал, они сами генерируются в TexturePacker. За одно у меня в коде происходит перевод пиксельных координат спрайта в текстурные координаты:
0
|
|||||||||||||||||
| 19.12.2020, 01:10 [ТС] | |
|
Перед тем, как я забросил эту игру, в мае 2017, у меня были наброски на WebGL-движке Phaser, где я реализовал механику движения танчика. Демку можно запустить в браузере по ссылке: https://8observer8.bitbucket.i... City/dist/
0
|
|
| 28.12.2020, 02:31 [ТС] | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Самый простой (из известных мне) и бесплатный способ соединиться с удалённым сервером - это писать сервер с использованием Node.js/Express/WebSocket и использовать хостинг на Heroku или OpenShift. Официальная пошаговая инструкция для развёртывания на Heroku: Getting Started on Heroku with Node.js
Пример, в котором после соединения клиента с сервером - клиент и сервер выводят сообщения о соединении на экран. Используется бесплатный тариф, поэтому сервер засыпает если им не пользуются 30 минут, а чтобы разбудить, нужно подождать 10-15 секунд.
Содержимое архива desktop-клиента, собранного в релиз для Windows на Qt C++: Результат работы desktop-клиента на Qt C++: Для отладки и релиз нужно на web-клиенте и на desktop-клиенте раскомментировать и закомментировать соответствующие строки: На веб-клиенте:
Исходники web-клиента и сервера
src/client/main.js
Исходники desktop-клиента на Qt C++
main.cpp
0
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 28.12.2020, 02:31 | |
|
Игра Battle City Аналог Battle City Иерархия объектов для battle city Игра Battle City libGDX на двоих (передача данных) Создание клона игры city bloxx Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
|
Лето уходит
kumehtar 17.08.2026
|
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
|
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины".
За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html
Задача: . . .
|
|
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
|
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет:
1. Использовать системное время и дату,
2. Есть возможность вводить время и дату вручную.
3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
|
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber.
Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
|
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео:
https:/ / vkvideo. ru/ video-240781534_456239017
YouTube:
eY5-5PyI9NM
Текстовая версия
|