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. Управление как клавиатурой, так и кнопками на экране.
Меня зовут Руслан. С 2016 года делаю игры в редакторе Construct 3 (раньше он назывался Construct 2), преимущественно без использования "настоящего" кода.
Что-то в последнее время у меня загорелось начать где-то сохранять свой опыт работы с этим редактором. И пока идут праздники, решил попробовать.
В этом посте описан мой способ обновлять игры, сделанные на Construct 3.
Сегодня китайская нейросеть сподобилась выдать работающую версию скрипта для автоматического обновления игры. Хочу поделиться результатом.
Суть проблемы:
Браузеры любят всё кэшировать. Они распихивают себе по кармашкам (в кэш) все скрипты игры, картинки, звуки и прочее, из чего состоит игра.
В итоге, когда мы заливаем на сервер новую версию, то может произойти вот что.
1. Игрок, который раньше уже играл в эту игру, запускает её у себя в браузере,
2. Браузер показывает ему устаревшую версию, загруженную из кэша, а не с сервера. Вроде как это снижает нагрузку на сервер, но в итоге игрок не увидит обновление.
Как это решается теперь в наших проектах:
1. Чтобы понять, новая это версия или старая, я стараюсь всегда выводить на экран номер версии, где-нибудь в нижнем углу, бледненько, но читаемо.
Как я указываю версию проекта на экране игры.
При старте каждого экрана в это текст вывожу номер версии из системной переменной projectversion.
Вывод версии на старте каждого экрана.
Иначе можно бесконечно чинить баги, не понимая, это старая версия загружена или просто новая сломалась.
2. Добавляю в проект группу с группами, в которой происходит обработка автоматического обновления.
Список групп для обработки Обновления игры.
Немного ниже покажу содержимое этих групп подробнее.
3. Создаю отдельный слой update, на котором располагаю одноцветный фон, вращающуюся иконку загрузки, кнопку обновления и текст с оповещением, что найдена новая версия.
Так это выглядит в игре.
Фон растягиваю на весь экран.
4. Прозрачность слоя update привязываю к прозрачности иконки на этом слое. Иконке заданы поведения Rotate и Tween, что позволяет ей бесконечно крутиться и плавно менять прозрачность.
То есть, теперь можно управлять прозрачностью слоя, задавая прозрачность иконки.
На старте каждого экрана делаю иконку и фон полностью прозрачными, чтобы они не появились раньше времени.
Действия на старте экрана и привязка прозрачности слоя Обновления к иконке.
5. Далее, используем плагин Browser. Когда он сигнализирует, что нашёл обновление - включаем окно (точнее сказать - слой) Обновления.
Действия при обнаружении Обновления и включение окна (слоя) Обновления.
Важный момент. Как Браузер понимает, что есть новая версия игры?
По номеру версии!
Поэтому стараемся не забывать обновлять этот номер в поле Version (в главных настройках проекта в самом верху.
Где указывается номер текущей версии проекта.
Для удобства, я нумерую версии текущей датой и примерным временем сохранения проекта.
6. Параллельно с включением окна (слоя) Обновления у меня блокируются все активные игровые слои, чтобы игрок не ускакал случайно на другой экран.
Также включаю вращение иконки (Rotate, до включения слоя она не вращается, чтобы не тратить системные ресурсы).
И затем с помощью Tween плавно делаю иконку, а за ней и весь слой непрозрачным, чтобы игрок увидел предупреждение о новой версии, которая в данный момент загружается.
Здесь иконка вращается посредством поведения Rotate.
7. Когда обновление наконец загрузилось (определяем это с помощью того же плагина Browser), проверяем, если иконка Обновления ещё не включалась (может случиться и такое), то включаем её и показываем поверх кнопку "Обновить".
Обработка обнаруженной новой версии.
Включение кнопки Обновить.
Если же экран обновления уже включен, то просто включаем кнопку, чтобы игрок мог сам нажать её в удобный для него момент.
Также меняем текст на новый.
Включаем кнопку, которая закрывает собой иконку и меняем текст.
8. И наконец последнее - обработка нажатия кнопки.
Обработка нажатия кнопки Обновить.
Тут всплыла та самая закавыка со скриптом, из-за которой пришлось напрягать китайскую нейросеть.
В браузерах Chrome, Opera, Yandex - в целом всё работает нормально и без скрипта. Когда кнопка нажата - страница просто обновляется с помощью Browser - Reload и всё ок - грузится новая версия.
Но Firefox решил выпендриться и в нём эта конструкция уходит в бесконечную перезагрузку: Грузится старая версия и снова появляется окно Обновления, пока игрок не догадается нажать Shift-F5, чтобы вручную загрузить самую новую версию.