Меня зовут Руслан. С 2016 года делаю игры в редакторе Construct 3.
Часть 6. Переменные.
1) Переменные всегда называю латинскими буквами с редкими вкраплениями цифр. Это даёт уверенность, что игра правильно всё поймёт и не создаст проблем из-за кириллицы в именах или я не перепутаю латиницу с кириллицей.
2) К переменным применяю «верблюжий» принцип camalCase: начинаются они со строчной буквы, а каждое следующее слово в ней - с прописной:
Верблюжий принцип.
3) Для каждой переменной подписываю её назначение. Иногда это очень помогает быстро вспомнить, зачем она вообще нужна:
Комментарии к переменным.
В этом плане считаю исключительно полезным навык слепой десятипальцевой печати (всеми пальцами, не глядя на клавиатуру). Пожалуй, я бы сказал, что это второй по важности навык после знания английского.
4) Никогда не создаю булевых переменных (boolean - триггеров true-false). Не нравятся они мне :)
А если быть точнее, их сложно преобразовать во что-то другое. К примеру, вчера мне казалось, что переменная mode будет переключать только 2 режима. А сегодня выяснилось, что их будет 3.
Чтобы не скакать потом по всему коду заменяя булеву переменную, я заранее делаю её строковой (string) и задаю ей одно из двух значений: on или off,
Почему не true и false? Так короче, легче менять одно на другое (on на off и обратно) и понятнее по смыслу (включено-выключено).
Строковые переменные вместо булевых.
5) Константы почему-то не использую. Пытался, но потом всё равно про них забываю. Поэтому пользуюсь только обычными переменными.
6) Большая часть переменных, как и большая часть событий у меня оказывается в листе common.
7) Список переменных в листе сортирую по алфавиту (латинскому), чтобы быстрее находить нужные.
1) У меня часто бывает, что делаешь какую-то фичу в игре и тут в голову приходит, что хорошо бы сделать ещё вот это и вот это.
И начинаешь метаться, чтобы ничего не забыть.
Чтобы такие проблемы не возникали, пользуюсь досками с карточками (канбан-досками).
Что-то типа такого, но в электронном виде.
Канбан-доска из Википедии.
2) Как это работает?
- Появилась новая задача — быстро записал её в карточку, положил в колонку «Сделать» и забыл до поры до времени.
- Закончил текущую задачу — кинул карточку с ней в «Готово». Глянул, в список задач и взял следующую и перетащил в колонку «В работе».
- Решил поменять порядок задач и какие-то из них вообще выкинуть из плана? Нет проблем! Просто перетащил нужные карточки в другие колонки.
Таким образом, все задачи по проекту в любой момент перед глазами и можно сразу понять, что лучше сделать сейчас, а что отложить на потом.
3) Текущие задачи по личным проектам веду в kaiten.ru (раньше вёл в notion.so, но он закрылся для нашего региона). В Кайтене можно сделать удобную доску и оперативно перетаскивать выполненные задания между колонками.
Он даёт много бесплатных возможностей и не прогибается под санкциями :)
Кайтен.
4) Для рабочих проектов в компании мы используем сервис yougile.com.
Юджайл.
Это ещё более удобная доска с карточками.
Дома её не использую, чтобы случайно не смешать проекты.
3) Колонок в электронных досках можно сделать сколько угодно.
Например, у нас на текущей рабочей доске есть колонки:
- Легенда: описания проектов с их цветовой «дифференциацией штанов» и ссылками на всё по проектам.
- Бэклог: сделаем когда будет время или никогда.
- Депрессия: начали делать, но возникли траблы. Возможно мы их когда-нибудь доделаем. Или нет.
- Спринт: хорошо бы сделать за неделю.
- Правки: это нужно исправить в первую очередь.
- В работе: то, что мы делаем сейчас.
- Тестирование: вроде готово, но нужно проверить.
- Готово: протестировали, залили и забыли как страшный сон.
- Галя, у нас отмена: сначала хотели сделать, потом прикинули и решили: «данунафиг».
Вот такая удобная штука. Очень, рекомендую этот способ ведения проектов.
P.S. Пикабу вчера напомнил, что у него тоже есть свой раздел с играми. Сегодня я отправил туда несколько своих игрушек на предмет их размещения в разделе. Посмотрим, что ответят модераторы. Скорее всего шансов мало, но надеюсь, что они есть.
Меня зовут Руслан. С 2016 года делаю игры в редакторе Construct 3.
В этой серии заметок поделюсь своими наработками по ведению проектов в Construct 3.
Некоторые из них наверняка будут спорными для новичков, а некоторые - для настоящих программеров (себя к таким не отношу).
Но на данный момент использую именно такой формат упорядочивания.
Впрочем - он тоже периодически меняется, когда встречаю какую-то интересную фишку в чужих проектах.
Пишите в комментариях кому есть что добавить.
Итак, создание проекта:
1) Если проект типовой (или даже если не совсем типовой, но в портфолио есть хоть отдалённо похожий) - копирую старый проект и переименовываю, чтобы не заморачиваться мелкими настройками.
Потом постепенно копирую в него отработанные приёмы из предыдущих проектов, но по возможности проверяю, не изменились ли используемые функции?
Дело в том, что разработчики Сonstruct 3 постоянно дорабатывают свой редактор и то, что год назад работало хорошо сейчас может вообще не запуститься.
К примеру, поведение Pin, скопированное из старого проекта имеет несколько иные настройки, чем у созданного заново.
А вместо старого отдельного поведения Rex_MoveTo появился стандартное поведение MoveTo.
2) Обязательно заполняю описание проекта (в настройках редактора можно задать некоторые из них по умолчанию).
Параметры проекта.
3) Всегда задаю и перед каждым экспортом обновляю версию проекта.
Это позволяет отслеживать её в каком-нибудь окне игры или в углу экрана, чтобы не оказаться в заложниках кэша браузера.
А браузеры просто обожают всё кешировать и часто показывают устаревшую версию игры.
Программно выводим версию проекта.
Как версия выглядит в игре.
4) Всегда сразу отключаю Worker в продвинутых настройках проекта.
Worker отключен.
Эта зараза умеет запускать события "с пятого на десятое", в результате чего некоторые события выполняются до того, как выполнятся предыдущие.
Возможно я просто не понимаю его принципа, но мне без него лучше.
Также с ним не работает очень полезный плагин GamePush.
Это то, что касается создания нового проекта.
Завтра рассмотрим вариант хранения материалов игры, чтобы ничего не терялось и всё было доступно.
Меня зовут Руслан. С 2016 года делаю игры в редакторе Construct 3.
Когда у нас в работе попадаются достаточно сложные проекты, которые потом нужно долго поддерживать, мы используем 2 отдельных папки на сервере.
1. Тестовая — в неё мы постоянно загружаем обновлённые версии проекта, чтобы посмотреть, всё ли работает как надо.
2. Боевая — в неё заливаем уже более менее-протестированные версии, которые не стыдно показать заказчику.
На днях мой коллега попросил сделать разные favicon для тестовой и боевой версий игры, чтобы он мог визуально различать их в своей куче вкладок браузера.
Favicon – это маленькие иконки сайта, которые выводятся во вкладке браузера и в некоторых других местах типа Избранного в браузере.
Иконка сайта или игры.
Поначалу я ответил, что это будет слишком морочно — при каждой заливке боевой версии менять вручную все иконки в проекте (те, которые в разделе Icons & screenshots).
Иконки в проекте.
При этом у нас в последнем проекте 6 отдельных блоков со своими иконками. В общем, «да ну нафиг».
Но вчера я вспомнил про нашего китайского друга — нейросеть DeepSeek, которая часто помогает накодить что-нибудь эдакое.
И он снова не подвёл. Подсказал, как программно менять эту иконку в проекте.
1. Сначала рисуем иконку в нужном размере
ДипСик говорит, что размеры бывают нужны разные, но вроде максимальный-оптимальный для нашей цели — 64х64 px.
Чтобы не мудрить, я просто перекрасил в другой цвет основную иконку проекта прямо в редакторе анимаций C3.
Перекрашенная иконка.
2. Сохраняем картинку в файл
Я сохранил картинку как icontest.webp
Название и расширение этой картинки может быть почти любое, на ваш вкус.
3. Закидываем картинку к другим файлам проекта
Папка с файлами проекта в Construct 3.
4. Задаём переменные для переключения иконки
У меня это строковые переменные:
Управляющие переменные.
- modeTest — хранит тип версии.
”test” – тестовая версия *,
”” - боевая версия.
* Использую именно этот вариант (”test” и пустую строку), поскольку они у нас завязаны на имена таблиц в базах данных.
Содержимое этой переменной я меняю вручную с ”test” на ””, перед компиляцией и заливкой боевой версии.
- modeTestIcon — триггер, показывающий, переключилась ли уже иконка (чтобы не переключать иконку при каждом переходе между макетами проекта).
”off” – иконка ещё не менялась,
”on” – иконка уже сменилась.
5. Добавляем событие переключения иконки
И теперь самое главное — сам скрипт переключения иконки.
Использование скрипта.
Скрипт отдельно:
var link = document.querySelector("link[rel~='icon']") || document.createElement('link');
link.rel = 'icon';
link.href = 'icontest.webp'; // путь к иконке тестовой версии игры
document.head.appendChild(link);
В этом событии мы проверяем:
- Если иконка ещё не переключалась modeTestIcon = ”off”,
- И если это тестовая версия игры modeTest = ”test”.
То задаём проекту иконку вот с таким именем icontest.webp. **
** Если у вас иконка будет под другим именем, не забудьте поменять ссылку на неё в скрипте.
И затем отмечаем в триггере modeTestIcon что иконка уже поменялась и не нужно делать этого снова.
6. Заливаем всё на сервер и тестируем.
Если всё сделано верно, то теперь мы можем быстро понять, где у нас вкладка браузера с тестовой версией, а где — с боевой.
Разные версии игры.
На сим откланиваюсь. Скоро вернусь с очередной, скучной, но полезной фичей для Construct 3 :)
Дополняет предыдущую программу. В частности поддерживает конвертацию в формат webp, который сейчас повсеместно используется в Construct 3.
6. Встроенный редактор анимаций в Construct 3
Также бывают случаи, когда проще отредактировать картинку прямо в самом Construct 3, чем открывать отдельный редактор.
Встроенный редактор анимаций в Construct 3.
Если нужна готовая графика
1. Идеальный вариант, когда готовую графику даёт сам заказчик. Часто заказчики сами нанимают дизайнера или сам рисует макет игры в Figma. Оттуда удобно копировать отдельные элементы дизайна.
Рабочая Figma одного из наших проектов.
2. Если готовых картинок нет, можно попробовать поискать подходящее на бесплатных ресурсах. В частности, пиксельные картинки иногда беру здесь:
К сожалению с некоторых пор он стал отчасти платным (но не сильно дорогим) и работает только через ВПН.
Но даже с базовым бесплатным тарифом можно наклепать себе до 20 картинок в сутки (на 50 кредитов).
Из плюсов данной сетки:
+ Простая регистрация.
+ Все картинки проекта на одном экране.
+ Куча готовых стилей.
+ Можно задать свой стиль, загрузив несколько своих картинок.
+ Можно превращать растр в вектор.
+ Можно буквально натягивать сов на глобусы (делать макапы на неровные поверхности).
+ Быстрое удаление фона.
+ Коррекция результата прямо в редакторе и много чего ещё.
Сейчас есть куча других нейросеток для генерации чего угодно, в том числе и графики. Но я в них не углублялся, не смогу подсказать что-то дельное. Кто знает — пишите о них в комменты.
Как-то пробовал всякие Midjourney, Шедеврумы и иже с ними, но это был давно. Думаю, сейчас они далеко ушли вперёд (наверное тоже не все).
Пока это всё, что могу сказать на тему бесплатной графики для игр.
P.S. Возможно, пока пишу эту заметку, в интернетах появилась какая-то новая достойная нейросеть :)
P.P.S. Обычно когда выходит какой-нибудь новый условный Кандинский, который «ещё лучше понимает нас» — тестирую его на такой промт: «Три советских пионера сидят на лавочке».
Раньше все нейросетки упорно рисовали старичков с Дикого запада.
Ну, тоже по-своему пионеры.
Полгода назад уже уверенно рисовали детей в красных галстуках от строгих костюмов :)
Ну, уже почти пионер.
И вот сегодняшняя версия от Кандинского.
Тоже пионеры.
И пионерки тоже. Но чё-то пока в основном инвалиды.
Прогресс налицо, но ещё есть над чем работать (например, над количеством ног).
Ну и наверное ещё от выбранного стиля многое зависит.
Меня зовут Руслан. С 2016 года делаю игры в редакторе Construct 3.
Сегодня ради интереса (и благодаря праздничному дню) запилил простенький платформер в полностью бесплатной версии Construct 3. Было интересно, много ли удастся впихнуть в бесплатные лимиты редактора.
В целом, впихнулось почти всё необходимое для мини-игры.
Лукаво не мудрствовал, взял за основу для идеи первый уровень из раннера, который дорабатывал несколько лет назад на заказ.
Вся работа заняла часов 5 чистого времени с перерывами на разные домашние дела. Заранее соглашусь с критикой, это не очень быстро для маленького платформера.
Основные подробности проекта:
1. Использовано 17 событий из 25. Никакого JavaScript и дополнительных плагинов, всё только "из коробки".
Фрагмент кода.
2. В игре 2 слоя - объекты и интерфейс.
3. Один вид врагов, которым нужно прыгать на голову, чтобы их победить.
4. Один босс - тот же враг, только покрупнее, покрепче и ускоряется после каждой атаки игрока.
5. Использовал русифицированную версию Construct 3, чтобы новичкам было проще разобраться.
6. Из врагов выпадают монетки, которые подсчитываются.
7. У игрока 3 жизни.
8. Графику почти всю взял готовую (только небо и землю нарисовал сам).
9. Звуки и музыку взял готовые из предыдущих своих игр.
10. Игра весит около 2 Мб, из которых 1.4 Мб - музыка Кевина МакЛауда.
11. Управление как клавиатурой, так и кнопками на экране.