В посте прошлой недели я рассказал о своих первых впечатлениях от игрового движка Godot. Хотя у меня еще есть некоторые резервы по поводу кодогенерации и поддержки C# (я не могу принять идею работы в GDScript, извините), я должен сказать, что меня очень приятно затянуло в разработку в Godot.

Я объясню, что я делал на прошлой неделе, но если вам не терпится, вы можете сыграть в мою игру здесь — как и обещал.

Дизайн игры

Большинство моих хобби-проектов геймдевов провалились по той же причине: я ставил слишком высокие цели, влюблялся в концепцию и пытался реализовать сложную игровую механику. В этот раз я решил, что так быть не должно: я выбрал очень простую и известную игровую идею — шутер с вертикальной прокруткой. Это скучно? Конечно, но мне нужно напомнить себе, что я не создаю следующий большой инди-хит: я только учусь. Выбор этой концепции имеет ряд существенных преимуществ:

  • можно удобно построить, посмотрев учебную игру Godot, не будучи явным подражателем;
  • игровая механика проста для понимания и реализации: двигайте космический корабль, стреляйте лазерами и избегайте повреждений от столкновений с врагами;
  • легко создать игровой цикл, в котором вы должны выжить как можно дольше и увеличить свой счет. Это очень важно, потому что позволяет игре иметь четкое начало и конец;
  • не требует много тестов для проверки;
  • Я могу перестать добавлять новые функции, когда захочу, и при этом утверждать, что я прошел игру!

Игровое искусство

Как только тема и общая концепция игры определены, пришло время добавить в мой проект некоторые художественные ресурсы. Дело в том, что у меня их пока нет! К счастью, я всегда могу нанести визит всемогущему Кенни.

Кенни — легендарный художник, выпустивший более 30 000 бесплатных ресурсов, которые может использовать любой начинающий разработчик игр, даже в коммерческих проектах. Это очень удобно, так как мне явно не хватает художественных навыков. Арт-пак Space Shooter Redux включает в себя все необходимые мне ресурсы и даже больше: десятки спрайтов, звуковые эффекты, пользовательский интерфейс, текстовые шрифты и фоновые изображения. Спасибо, Кенни.

Программирование

Код игры прекрасно строится на основе того, что я узнал ранее. Тем не менее, есть еще пара новых паттернов, которые мне пришлось выучить самостоятельно.

Интересным примером является программное подключение сигналов от одной сцены к другой. Хотя Godot позволяет напрямую подключать события из редактора, можно подключать только объекты, которые уже определены в той же сцене, чего нельзя сказать о моих процедурно сгенерированных вражеских кораблях. Это проблема, потому что всякий раз, когда враг уничтожается, я хочу обновить счет игрока в главном игровом менеджере. API-интерфейсы Godot охватывают этот вариант использования с помощью метода Connect:

var enemy = (Enemy)EnemyScene.Instance();
enemy.Connect("ScoreUp", this, "_on_Enemy_ScoreUpdate"); 
AddChild(enemy);

_on_Enemy_ScoreUpdate в игровом менеджере будет предупреждено, что враг был уничтожен и что это может увеличить счет на определенное число.

Заключение

Я до сих пор не уверен, каким должен быть мой следующий проект: может быть, платформер? Или игра-головоломка? Тем не менее, у меня гораздо больше уверенности в работе с Godot, и я чувствую, что еще какое-то время буду получать от этого удовольствие!

Рекомендации

Первоначально опубликовано на https://blog.lorisocchipinti.com 22 февраля 2023 г.