Incvisitor
В Блендере, кстати, раньше был встроенный игровой движок. Не знаю, есть ли он там сейчас, но если есть, то можно его попробовать поковырять.
Поскольку, я сам, безрезультатно метался как Буриданов осел, выбор поручено было делать ребенку.
Победил AGK, что сподвигло меня внимательно изучить этот инструмент.
Сперва о минусах:
Встроенный язык - диалект бейсика родом из семидесятых, в нем даже есть go to, go sub и return.
Нет ООП, нет указателей, из структур данных - составные типы а ля struct, рекурсия данных невозможна, (формально можно, но программа виснет). Из контейнеров - массивы которые внутри реализованы как хэш-таблицы. Есть сборщик мусора но развитых систем управления памятью - нет. Т.е. - объекты языка (массивы) подчищаются GC. Объеты движка (спрайты и т.п.) надо удалять вручную. GC - сильно сказано, похоже это простейший счетчик, неспособный разрулить циклические ссылки.
Язык по производительности примерно GDScript версии 3.5 - в полтора-два раза медленней питона, почти в три раза медленней чем Lua без jit, примерно в 30 раз медленнее Lua с jit и в восемьдесят раз медленней чем си. Условно, ваш i9-9900 превращается... превращается в Pentium 166. То-есть, если вам, к примеру, нужен поиск пути, а в библиотеке AGK ничего такого нет, то вы стряхиваете пыль с инкрементальной версии "simplified Dijkstra" и приседаете вокруг, считаете путь не каждую итерацию мира и на весьма ограниченную глубину. Добро пожаловать в девяностые! При этом, поскольку вы никак не можете ссылаться на объекты - то повсеместно используете массивы индексов и, ваш код, неотвратимо превращается в лапшу. Язык, честно, убогий. К слову, в том же Годо встроенный А-стар имеется, и язык получше, но... не судьба значит.
Производительность измерял самописными бенчмарками типа bunnymark с раскрашиванием в шейдерах (в 3D зайцем выступал мутант взятый из Fyrox engine) и сортировках массивов.
Движок закрытый, но исходники есть на гитхабе - написан незатейливо, защита памяти, реаллокации - забудьте, вот выделяется на старте под физические объекты пул в 1024 указателя и всё, создал больше - программа вылетела без объяснения причин. Есть система частиц на GPU, и хотя на количество самих частиц ограничений нет, есть непонятки с работой и количеством эмиттеров, что-то может не работать или работать не так, сообщения об ошибках, диагностика, логи - ничего этого нет. Архитектура - как топор: просто, надежно, добротно - не знаешь как пользоваться - твои проблемы.
Производительность в 3D - невысокая, хуже чем в Godot. Из оптимизаций - пространные рассуждения разработчика о пользе батчинга. Из графических фич - можно писать шейдеры. Отладка шейдеров - "лучше сразу писать идеально". Запись данных в шейдеры съедает, в тяжелых случаях, до трети производительности, никакой пакетной передачи, uniform buffers, ничего этого нет, все отдано в жертву совместимости с любым самым древним барахлом; зато можно погрустить.
Если интересно цифры, то на оборудовании, где Годо 3.5 может 4 миллиона треугольников в кадре, на 30 fps. AGK смог 700 тысяч. (Оба, без какой-либо логики и скриптов - тупо загрузили статику и показывают.)
Справедливости ради - 3D тут - чисто маркетинговая фича.
Теперь о плюсах:
Производительность в 2D - приемлемая. На встройке intel 520 (реальный отстой) движок способен около 5 тысяч спарйтов с анимацией и шейдерами в 30fps, а если поприседать и попрыгать - можно выжать еще чуток; в совокупности со встроенной системой частиц - нормально.
Легко развернуть приложение под любую платформу и стор одной кнопкой. Никаких студий не надо. Т.е. вообше!!! Движок все сделает и вроде как даже подпишет, только не опубликует.
Удаленная отладка на любом устройстве тоже одной кнопкой - ставишь на телефон AGK Player и все. Не нужно режима разработчика, даже подключать телефон проводом к компьютеру не нужно. Достаточно, чтоб они были в одной сети.
Моментальная компиляция - изменил код – тут же удаленно запустил его, прямо на устройстве.
Работает на любом мусоре.
Если знать о граблях и аккуратно обходить их - кажется, стабилен.
Собственно вот.
Aroha,
[quoto]Движок все сделает и вроде как даже подпишет[/quote]
что значит - вроде как?
вы что, не попробовали собрать билд для телефона?
А вдруг нет?
Представьте, сын будет неделю, месяц или два делать игру, а потом при сборке билда/запуске на телефоне будет сюрприз?
И как он ключи разработчика генерирует без вашего пароля? дефолтный ставиться?
Достаточно, чтоб они были в одной сети
Это как, через интернет или wifi?
Вы это тоже не проверяли?
RenPy - тоже вроде как под Android собирает билд, а по факту - нет. То не устанавливается на телефоне, то после установки не запускается, или даже сразу на этапе сборки ошибка.
Причем, что интересно, учебный и тестовый примеры в разных версиях ведут себя примерно также, но иногда один из них запускается на телефоне.
Лучше сразу проверить, пока не началась разработка игры.
Airumi
> Представьте, сын будет неделю, месяц или два делать игру, а потом при сборке билда/запуске на телефоне будет сюрприз?
Познакомится с кусочком взрослого мира. Мы почти год командой делали проект, который вылетел в трубу.
Azure Drake
> Познакомится с кусочком взрослого мира. Мы почти год командой делали проект,
> который вылетел в трубу.
У меня так уже с десяток раз было. Нам не привыкать. У меня уже подозрение, что это часть это у всех так. Поэтому лучше лишний раз вечерами не задерживаться и не перерабатывать. Всё тлен
В смысле, не проверял?
Собирается и пакет и бандл. Подписывать не пробовал, о коммерческой разработке речи не идет, это всё, чисто поиграться ребенку и изучить основы.
Отладка по wifi работает, я же написал; причем с любым устройством, и под любой поддерживаемой ОС, не обязательно с телефоном. Можно даже вести разработку на телефоне или планшете, а запускать программу на PC, raspberry pi, или на mac.
Может что подойдет из этого
https://ctjs.rocks/ru
https://gdevelop.io
https://stencyl.com
Aroha
> Встроенный язык - диалект бейсика родом из семидесятых, в нем даже есть go to,
> go sub и return.
> Нет ООП, нет указателей, из структур данных - составные типы а ля struct,
> рекурсия данных невозможна, (формально можно, но программа виснет). Из
> контейнеров - массивы которые внутри реализованы как хэш-таблицы. Есть сборщик
> мусора но развитых систем управления памятью - нет. Т.е. - объекты языка
> (массивы) подчищаются GC. Объеты движка (спрайты и т.п.) надо удалять вручную.
> GC - сильно сказано, похоже это простейший счетчик, неспособный разрулить
> циклические ссылки.
Ты сейчас описываешь JavaScript. Только JavaScript по скорости как С++.
Azure Drake
> Мы почти год командой делали проект, который вылетел в трубу.
что за проект
Мисс_Самец
Неигровой. Промахнулись с изначальным позиционированием на рынке. Ниши для такой штуки не оказалось.
раб вакуумной лампы
>Ты сейчас описываешь JavaScript. Только JavaScript по скорости как С++
Я пробовал растеризатор делать на JavaScript. То, что было написано на Паскале, на Десктопе летало, а написанное на JavaScript в браузере едва ползало. Скорость минимум раз в 20 отличалась.
true_bump
Не ну это повод 11-летнему взяться сразу за ассемблер.
Алсо - в 20 раз не верю. Криво, значит, было написано.
Либо в допотопные времена, когда JIT ещё не придумали.
Прошло совсем немного времени, а ребенок уже сделал вывод, что играть в игры гораздо интереснее чем писать их.
Меня радует его способность к аналитике, но не скрою, толика разочарования есть.
Вопрос теперь стоит так: "папа, напиши мне игру, а я, за это, тебе все нарисую."
Всем пытающимся помочь, спасибо.
Если кому вдруг интересно, скорее всего это будет RayLib и pure C. В других обстоятельствах я бы выбрал паскаль, но на подвиг Mirrel'я ради лишь фана меня не тянет, увы.
Всем счастья, всех благ, и неуклонного роста благосостояния.
Aroha
> Меня радует его способность к аналитике, но не скрою, толика разочарования есть.
> Вопрос теперь стоит так: "папа, напиши мне игру, а я, за это, тебе все нарисую."
Выход только один - сделать изготовление игры игрой.
Как-то так: "Картинка? А почему не живая?" или, "А, если я здесь сверну не налево, а направо, что будет?"