*Вы можете найти ссылки на предыдущие части в нижней части этого руководства.

Поздравляем с окончанием нашего туториала по 2D-платформерам! Ваша настойчивость на протяжении всей этой серии впечатляет, и она, без сомнения, пригодится позже в вашем путешествии по разработке игр. Создав нашу игру, вам нужно вернуться и протестировать ее, чтобы убедиться, что она не содержит ошибок.

ЧТО ВЫ УЗНАЕТЕ В ЭТОЙ ЧАСТИ:

  • Базовое тестирование игры.
  • Экспорт проекта.

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

Вот общие рекомендации по ручному тестированию:

  1. Механика игрового процесса. Сюда входит тестирование всех игровых механик, чтобы убедиться, что они работают правильно. В нашей игре механика для тестирования будет включать в себя движение и прыжки, восхождение по лестнице, преодоление препятствий и способность выигрывать и проигрывать в игре. Взаимодействие персонажа игрока с врагами (например, генератор бомб и ящиков) также должно быть протестировано. Они нормально сталкиваются? Анимации воспроизводятся правильно? Обязательно разделите каждый фактор игры на контрольный список, который затем вы сможете протестировать по отдельности.
  2. Уровни: каждый уровень должен быть тщательно протестирован. Это включает в себя тестирование всех путей, чтобы убедиться, что игрок может дойти до конца, перепрыгнуть через препятствия с достаточным пространством и что он не может случайно выйти за пределы. Следует проверить размещение спаунеров, лестниц, пикапов и других препятствий.
  3. Пользовательский интерфейс (UI) и элементы управления. Вам следует проверить, правильно ли работают элементы управления в игре и что пользовательский интерфейс отображает правильную информацию. Например, вы можете проверить, правильно ли отображается количество жизней и уменьшается ли оно, когда вы теряете жизнь.
  4. Сложность и прогресс. Убедитесь, что игра становится сложнее по мере прохождения уровней. Например, на более поздних уровнях появляется больше спаунеров и движущихся платформ. Убедитесь, что эта последовательность кажется справедливой и сбалансированной.
  5. Аудио и визуальные эффекты. Протестируйте звуковые эффекты, музыку и графику в игре. Это будет включать в себя тестирование таких вещей, как звуки подбора предметов, прыжков и разрушения препятствий, а также анимации для этих действий.
  6. Производительность. Проверьте производительность игры. Он должен работать плавно, без задержек или заиканий, даже если на экране много препятствий.
  7. Ошибки и сбои. Играйте в игру, активно пытаясь вызвать ошибки и сбои. Это может включать в себя такие вещи, как попытки двигаться в стены, приостанавливать и возобновлять игру или пытаться взаимодействовать с объектами неожиданным образом.
  8. Пограничные случаи: тестируйте необычные или экстремальные ситуации. Например, что произойдет, если игрок вообще не двигается? Что, если они попытаются взобраться по лестнице, пока по ней катится бомба?
  9. Игровой опыт. Наконец, проверьте общий игровой опыт. Интересно ли играть в игру? Есть ли какие-то разочаровывающие моменты? Это будет субъективно, поэтому может быть полезно привлечь несколько человек для тестирования игры.

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

### Player.gd

#older code

#singular input captures
func _input(event):
            
    #on climbing ladders
    if Global.is_climbing == true:
        if !Input.is_anything_pressed():
            $AnimatedSprite2D.play("idle")
            $Effects/RunningParticles.emitting = false
        if Input.is_action_pressed("ui_up"):
            $AnimatedSprite2D.play("climb") 
            gravity = 100
            velocity.y = -160
            Global.is_jumping = true
            $Music/JumpSFX.play()

Другим было то, что моя анимация зависала, если мой игрок сталкивается с бомбой или коробкой во время подъема.

### Box.gd

#older code

func _on_body_entered(body):
    # If the bomb collides with the player, play the explosion animation and disable spawning
    if body.name == "Player":
        $AnimatedSprite2D.play("explode")
        # Disable spawning in BoxSpawner
        Global.disable_spawning()
        #deal damage
        if Global.can_hurt == true:
            body.take_damage()
            Global.is_climbing = false
            Global.is_jumping = false
### Bomb.gd

#older code
func _on_body_entered(body):
    #if the bomb collides with the player, play the explosion animation and start the timer
    if body.name == "Player":
        $AnimatedSprite2D.play("explode")
        $Timer.start()
        Global.is_bomb_moving = false
        #deal damage
        if Global.can_hurt == true:
            body.take_damage()
            Global.is_climbing = false
            Global.is_jumping = false

Я также исправил таймер, который запускался до закрытия узла «Инструкции». Это произошло потому, что мы установили таймер в начале кода, а не в определенных блоках выполнения, поэтому он всегда будет запускаться первым.

### Player.gd

#older code

#time we started the level
var level_start_time 

func _ready():
    #older code
    
    #show instructions
    if Global.get_current_level_number() == 1:
        #stop processing
        set_process(false)
        $Instructions.visible = true
    else:
        level_start_time = Time.get_ticks_msec()
        
    #play background music
    $Music/BackgroundMusic.play()

    
#hide popup
func _on_accept_button_pressed():
    #hide popup
    $Instructions.visible = false
    #unpause game
    get_tree().paused = false
    set_process(true) 
    level_start_time = Time.get_ticks_msec()

Я также удалил все операторы печати, которые добавлял в игру для целей тестирования, так как они больше не нужны. Я также проверил свою панель ошибок, чтобы исправить все возникшие ошибки. Мы получили уведомление о том, что наша переменная max_lives никогда не используется, поэтому я удалил ее. Оставьте ошибки, связанные с проблемой «дельта», так как ваши функции процесса требуют этот параметр по умолчанию.

Окончательный код можно найти здесь.

Вы также можете использовать Profiler ниже, чтобы отслеживать производительность вашей игры при ее запуске. Это поможет вам измерить ваш код в соответствии с измерениями производительности вашего кадра, физического кадра, времени простоя и физического времени. Это поможет вам определить, какие функции нуждаются в оптимизации.

После того, как вы протестировали свою игру и остались довольны исправлениями, вы можете продолжить и экспортировать проект. Откройте окно Настройки проектаЭкспорт.

Это откроет окно экспорта, которое будет пустым, поскольку у нас нет добавленных предустановок экспорта. Это базовый шаблон, который Godot будет использовать для экспорта нашего проекта на определенные платформы. Чтобы создать набор параметров экспорта, нажмите кнопку Добавить… в верхней части меню экспорта. Откроется раскрывающийся список платформ, из которых можно выбрать предустановку экспорта. Выберите вариант «Рабочий стол Windows», так как наша игра будет создана для настольных компьютеров.

Как только это будет сделано, вы увидите, что ваш пресет был добавлен. Параметры по умолчанию часто подходят для экспорта, поэтому их настройка обычно не требуется. Кроме того, для создания пакетов Godot необходимы установленные шаблоны экспорта. Меню экспорта будет жаловаться, если чего-то не хватает, и не позволит пользователю экспортировать для этой платформы, пока он не решит эту проблему.

Для этого выберите опцию «Управление экспортом», чтобы установить последний шаблон.

Введите имя вашего проекта и выберите место его сохранения под «Путь экспорта».

Затем выберите опцию «Экспорт проекта».

Теперь, когда вы перейдете в каталог, в который вы ее экспортировали, ваша игра должна быть там в формате .exe! Теперь вы можете играть и делиться им столько, сколько захотите.

И вот оно! Вы, наконец, завершили свою игру Castle Climber 2D Platformer. Похлопайте себя по плечу, потому что это было много работы, и нужно прилагать усилия, чтобы каждый день вставать и просто учиться. Сейчас самое время сделать резервную копию вашего проекта в последний раз, а затем сделать перерыв!

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

Предыдущие части серии руководств

Учебная серия состоит из 24 глав. Я буду публиковать все главы в отдельных ежедневных частях в течение следующих нескольких недель. Вы можете найти обновленный список ссылок на учебники для всех 24 частей этой серии на моем GitBook. Если вы еще не видите ссылку, добавленную к части, это означает, что она еще не опубликована. Кроме того, если будут какие-либо будущие обновления серии, мой GitBook будет местом, где вы сможете быть в курсе всего!

Поддержите сериал!

Если вам нравится эта серия и вы хотите поддержать меня, вы можете пожертвовать любую сумму моему магазину KoFi или купить оффлайн PDF, в котором вся серия собрана в одном буклете, который можно взять с собой!

Брошюра дает вам пожизненный доступ к полной автономной версии брошюры «Изучайте Godot 4, создавая двухмерный платформер» в формате PDF. Это 451-страничный документ, содержащий все учебные пособия из этой серии в последовательном формате, а также вы получите от меня специальную помощь, если вы когда-нибудь застрянете или вам понадобится совет. Это означает, что вам не нужно ждать, пока я опубликую следующую часть серии руководств на Dev.to или Medium. Вы можете просто двигаться дальше и продолжать обучение в своем собственном темпе — в любое время и в любом месте!

Эта книга будет постоянно обновляться для исправления недавно обнаруженных ошибок или устранения проблем совместимости с более новыми версиями Godot 4.