Русский
Русский
English
Статистика
Реклама

Механики ловушек и интерактивных объектов в Godot Engine. Часть 2

Приветствую вас во второй части механик ловушек и интерактивных объектов в Godot Engine. Я решил пока-что выпустить эту часть, чтобы выпустить эту часть, чтобы показать механики, которые отвечают за направление уровня в играх. Я имею в виду двери, ключи и движущиеся платформы. В данном случае движущиеся по желанию игрока. Такие платформы можно будет ронять, использовать как мост и другое.Для того чтобы всё работало мы будем использовать NodePath. Только в этом случае не для перемещения игрока, а для перемещения объектов относительно текущего положения.Предыдущие статьи:

Переключатель

Для начала создадим переключатель. Это будет Area2D со спрайтом и коллизией. Он будет иметь метод interact(_interactor: Node), для того чтобы взаимодействовать с другими объектами, на которые будет указывать NodePath. Вот скрипт этого переключателя:
toolextends Area2Dexport (NodePath) var dependent_node: NodePathexport (bool) var toggle: bool = falsevar prev_toggle: bool = falsefunc _process(_delta: float) -> void:if prev_toggle != toggle: # Отвечает за воспроизведение нужной анимации. Нуждается в доработкеif toggle == true:$AnimatedSprite.play("toggle_on")else:$AnimatedSprite.play("toggle_off")prev_toggle = togglefunc interact(_interactor: Node) -> void:if !$AnimatedSprite.is_playing(): # Если Анимация воспроизводится и есть метод "toggle" у dependent_bode if get_node(dependent_node).has_method("toggle"):self.toggle = !self.toggle # поменять значение toggleget_node(dependent_node).toggle(toggle) # Вызвать метод toggle у dependent_node и передать toggle
А так выглядит сцена переключателя

Улучшение шипов

Теперь вспомните те шипы. Теперь мы улучшим их, чтобы добавить интерактива в игру. Пусть они будут переключаться также рычагом.
# Добавьте в конец того скрипта шиповfunc toggle(toggled: bool) -> void:self.showed = toggled
Теперь скрипт будет выглядеть следующим образом:
toolextends StaticBody2Dexport var showed = falseexport (bool) var timer = falsevar prev_showed = showedfunc _physics_process(_delta):if timer and $Timer.is_stopped():$Timer.start()if showed != prev_showed:if showed:$AnimatedSprite.play("show")else:$AnimatedSprite.play("hide")prev_showed = showedfunc _on_Area2D_body_entered(body):if body.name.ends_with("Actor") and showed:body.dead()func _on_Timer_timeout():if timer:showed = !showed$Timer.start()func toggle(toggled: bool) -> void:self.showed = toggled
Как-то так. Теперь игрок может менять состояние шипов.

Ключи и двери

Ключи

В скрипте игрока было число ключей и правила их добавления. Теперь нужно показать как они выглядят и дать их рецепт. Ключи будут подходить ко всем дверям, но будут ломаться после открытия.
extends Area2D # Как всегда спрайт и коллизия среди детей корневого узла сценыfunc _on_Key_body_entered(body):if body.name == "Actor": # Если подобравший ключ - Actorbody.key_picked_up() # Вызови метод подбора ключаself.queue_free() # Удалить с поля ключ
Теперь если войти в ключ он автоматически подберется. И держите скриншот того, как выглядит мой ключ.

Двери

По-началу двери могли только открываться, но это было в начале. Теперь я придумал как позволить им закрываться.
extends StaticBody2Dexport (bool) var key_can_used: bool = truefunc open():if !key_can_used: returnself.visible = falsefunc close():if !key_can_used: returnself.visible = truefunc toggle(vis: bool):self.visible = vis
Я добавил возможность переключить состояние двери через рычаг. Вот как выглядит сцена в редакторе.

Заключение

В данной статье я рассказал про переключатель, ключи и двери, а также показал улучшенную версию шипов. Следующей будет выпущена пятая часть механик персонажа, следом за которой я расскажу о предметах, которые можно поднять. Спасибо за внимание и удачи.
Источник: habr.com
К списку статей
Опубликовано: 27.10.2020 16:17:12
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

Разработка игр

Дизайн игр

Godot

Gdscript

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

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru