Добавил debug HUD (Head-Up Display), который мне показывает текущий FPS. Вообще HUD-ов в играх обычно два. Первый, собственно, игровой, который выводит состояние игры, как-то здоровье игрока, его очки, или сколько осталось патронов, а второй отладочный HUD, чисто для программиста. Он включается какой-нибудь секретной клавишей (у меня F5) и показывает полезную техническую информацию о работе графической подсистемы.
FPS - один из самых главных и нужных показателей. Если он начинает "проседать", то есть падает ниже 60 кадров в сек, значит, видеокарта не успевает рендерить картинку, и возможен стробоскопический эффект. У меня сейчас просто зверская производительность. Что бы я ни делал, как бы яростно ни крутил цветастый прямоугольник, FPS стабильно держится в районе 60. Вот как надо, учитесь!
krre:FPS стабильно держится в районе 60. Вот как надо, учитесь!
Фигня, надо чтоб был 24.
Кстати, да. Можно понизить FPS до 24 и наложить фильтр старой ЧБ киноплёнки. Будет как первый полёт Гагарина в космос на корабле "Восток"!
Сегодня у меня выдался продуктивный день (от слова "продукты", то есть хавчик). Поскольку я теперь могу выводить на экран текст, то становлюсь от этого всемогущим. Ко всем прочим плюшкам, связанным с текстом, я прибавил тост (toast) - это такая фенечка, которая высвечивается на экране на несколько секунд и гаснет. В Android используется сплошь и рядом. Например, удалил приложение - высвечивается текст, типа, приложение удалено. В Гагарине тост будет использоваться не так часто, но иногда он тоже полезен. Типичный случай - нажал F3, чтобы сохранить скриншот - и на экране на 4 сек показывается путь, куда он сохранился и с каким именем. На самом деле сохранение скриншота в игре ещё не происходит, с этим надо дофига повозиться, а вот тост уже показывается.
Вижу, Гагарин продвигается семимильными шагами!
Он волнами продвигается. Загрузил в себя порцию новой информации о работе какой-то подсистемы - продвинулся, потом снова пауза несколько дней, пока новую порцию загружаю. А порций этих ещё загружать и загружать.
krre:Кстати, да. Можно понизить FPS до 24 и наложить фильтр старой ЧБ киноплёнки. Будет как первый полёт Гагарина в космос на корабле "Восток"!
По крайней мере для катсцен - самое то.
Всё, я сделал сохранение скриншотов в png-файлы силами самой игры. Давно об этом мечтал, но предыдущие наскоки не принесли быстрого результата. Сегодня я нашёл чудесную библиотеку LodePNG, которая сохраняет файл одной командой. Вжик - и готово. Теперь вы не узнаете, в какой системе сделан снимок - заголовок окна больше не показывается.

Он и не нужен, только лишнее палево. Также не показывается тост о сохранении скриншота. Он появляется позже, когда файл уже на диске. И это правильно!
Запускается команда клавишей F12. То, что в отладочной консоли написано /make screenshot - это чисто так, обман, оно ничего не делает. Это я проверял, хорошо ли отображается текст на скриншоте. Ну, похоже, что неплохо.
Ещё одно нововведение - класс таймера. Запустил таймер с нужным интервалом времени и забыл про него. Когда время выйдет, сработает сигнал и запустит нужную функцию. Вывод на экран тоста о сохранении скриншота теперь повешен на этот таймер. Столько мусорного кода сразу убралось, что аж дышать легче стало.
Вернулся к графической подсистеме. Это самая сложная и громоздкая штука, её сходу не сделаешь - приходится набегами, как монгло-татары. Набежал, повозился и ходу, пока мозг не перегрелся. Много внутренних преобразований сделано за последние пару дней, но не каждое из них тут же отображается на внешнем виде. Вот, к примеру, сеточный режим, который я добавил сегодня, увидеть можно сразу. Нажал клавишу g, и вся геометрия рисуется сеткой, а потом нажал ещё раз - и вернулось назад, как было. Это, как нетрудно догадаться, тоже нужно для отладки. Геймеры сеточный режим вряд ли смогут включить, он им не нужен.
Вот этот режим мне понравился! Выглядит многообещающе
Самое замечательное, что так она быстрее всего отрисовывается. Если игра выйдет в итоге тормозная, то этот режим спасёт её от полного провала.
Вся графика теперь рисуется через Entity Component System. Предыдущая система дала быстрый результат, но к настоящему времени морально устарела и в дальнейшем принесла бы больше проблем, чем пользы. Визуально разницы между старым вариантом и новым пока никакой нет, разве что цветастость плоскости я убрал и сделал её равномерно голубой. Вообще цвет поверхности должен задаваться материалом, а точнее текстурой, диффузной составляющей, отражательной и рассеянной, но материала пока нет, его сложно делать, поэтому временно будет простой обобщённый цвет.
Много ещё нужно сделать, очень много, чтобы можно было показать что-то ещё, кроме прямоугольника.
Делал я, значит, делал игру и вдруг понял, что мне нужен state machine, то есть машина состояний. По русско-научному конечный автомат. Это когда игра переходит из одного большого состояния в другое, и всё радикально меняется. Например, заставка, меню, игра, экран гейм овера, титры - это всё состояния, в каждом из которых процессы обрабатываются по-разному. Разные нажатия клавиш принимаются, действия мышки производят различный эффект, графика рисуется по-своему. В меню, например, мышка двигает курсор, а в игре курсора нет вообще, и мышка крутит мир вокруг камеры. В общем, смысл ясен, хватит объяснять.
У меня в игре было на скорую руку сделанное временное подобие стейтов, но это скорее костыль, а не машина состояний, и теперь я дошёл до того момента, когда костыль уже не справляется. Надо переделать всё по-серьёзному, по-взрослому. Иначе труба. Типичная проблема - включить консоль читерских команд. Когда она показывается, игра должна ставиться на паузу, и вся клавиатура переключаться в режим ввода текста, а не управления игрой. И для этого тоже нужен свой стейт. Пошёл я, короче, всё это делать.
Маленький твик. Проапгрейдил FPS индикатор. Раньше он показывал частоту кадров с точностью до 6 знака после запятой и обновлялся столько раз в секунду, какой у него был FPS. То есть если 60, то 60 раз в секунду. Цифры мельтешили очень быстро, 59 постоянно сменялось на 60, и фиг вообще было понятно, что там написано. Теперь я сделал более человечнее. Показывается лишь целое округлённое число кадров и обновляется оно два раза в секунду, выводя при этом среднее значение, посчитанное за предыдущие полсекунды. Учитывая зверскую производительность игры в настоящее время, FPS сейчас никогда не меняется и показывает всегда одно и то же значение - 60. Аллилуйя!
Зашибенно! 60 классно смотрится
60 fps - хорошее, правильное число для игры. 0 fps - плохое число. Тут даже возражать не хочется.
Окончательно переделана архитектура игры с теперь уже полным использованием Entity Component System. Наконец-то я это закончил и удалил остатки старой системы вместе с файлами. Последнее, что перед этим оставалось переделать, - это камеру, и это было самое сложное, потому что камера показывает мир, и если что-то пойдёт не так, то она вообще ничего показывать не будет. Именно поэтому я затягивал с этим делом, отвлекаясь на всякие надписи, fps, стейты и прочее. Но теперь собрал все силы, концентрацию и закончил процесс. Это как взять какой-нибудь Эмпайр-стейт-билдинг, поднять его, поменять фундамент и вернуть на место. И чтобы при этом эта дура не упала, и ничего в ней не разбилось. Хорошо ещё, что игра находится на начальной стадии развития, и переделывать пришлось немного.
Теперь можно добавлять в игру другие геометрические фигуры. На этом этапе я планирую добавить куб и поставить его на плоскость. Потом было бы неплохо заняться освещением сцены.
Как только я разобрался с архитектурой игры и базовой графической частью, дальше стало гораздо интереснее. Теперь я могу добавлять в сцену любую геометрию в любую позицию, и никто мне ничего не скажет. Буквально за несколько минут я добавил создание такого примитива, как куб. Уменьшил его в пять раз по сравнению с плоскостью и поставил поверх неё. Одна беда - освещения нет, всё сливается, фиг что разберёшь. И это как раз самое время, чтобы вплотную заняться шейдерами, которые будут создавать свет. Штука, как всегда, непростая, но где только наша не пропадала, верно?
Маленький твик. Сделал куб красного цвета, чтоб отличать его от плоскости. Теперь видно, как он насквозь проходит сквозь неё.
Всё никак не могу собрать волю в кулак, чтобы заняться освещением и погрузиться во все эти матанские дебри. Там столько синусов и косинусов на квадратный сантиметр документации, что их количество зашкаливает в несколько раз.