В посте прошлой недели я рассказал о своих первых впечатлениях от игрового движка 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, и я чувствую, что еще какое-то время буду получать от этого удовольствие!
Рекомендации
- Сыграй в мою игру здесь
- Документация по API Godot Engine
- Сайт Кенни
Первоначально опубликовано на https://blog.lorisocchipinti.com 22 февраля 2023 г.