[Разработка игр, Дизайн игр, Godot] Механики ловушек и интерактивных объектов в Godot Engine. Часть 2
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Приветствую вас во второй части механик ловушек и интерактивных объектов в Godot Engine. Я решил пока-что выпустить эту часть, чтобы выпустить эту часть, чтобы показать механики, которые отвечают за направление уровня в играх. Я имею в виду двери, ключи и движущиеся платформы. В данном случае движущиеся по желанию игрока. Такие платформы можно будет ронять, использовать как мост и другое.Для того чтобы всё работало мы будем использовать NodePath. Только в этом случае не для перемещения игрока, а для перемещения объектов относительно текущего положения.Предыдущие статьи:
ПереключательДля начала создадим переключатель. Это будет Area2D со спрайтом и коллизией. Он будет иметь метод interact(_interactor: Node), для того чтобы взаимодействовать с другими объектами, на которые будет указывать NodePath. Вот скрипт этого переключателя:
tool
extends Area2D
export (NodePath) var dependent_node: NodePath
export (bool) var toggle: bool = false
var prev_toggle: bool = false
func _process(_delta: float) -> void:
if prev_toggle != toggle: # Отвечает за воспроизведение нужной анимации. Нуждается в доработке
if toggle == true:
$AnimatedSprite.play("toggle_on")
else:
$AnimatedSprite.play("toggle_off")
prev_toggle = toggle
func interact(_interactor: Node) -> void:
if !$AnimatedSprite.is_playing(): # Если Анимация воспроизводится и есть метод "toggle" у dependent_bode
if get_node(dependent_node).has_method("toggle"):
self.toggle = !self.toggle # поменять значение toggle
get_node(dependent_node).toggle(toggle) # Вызвать метод toggle у dependent_node и передать toggle
А так выглядит сцена переключателя
Улучшение шиповТеперь вспомните те шипы. Теперь мы улучшим их, чтобы добавить интерактива в игру. Пусть они будут переключаться также рычагом.
# Добавьте в конец того скрипта шипов
func toggle(toggled: bool) -> void:
self.showed = toggled
Теперь скрипт будет выглядеть следующим образом:
tool
extends StaticBody2D
export var showed = false
export (bool) var timer = false
var prev_showed = showed
func _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 = showed
func _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": # Если подобравший ключ - Actor
body.key_picked_up() # Вызови метод подбора ключа
self.queue_free() # Удалить с поля ключ
Теперь если войти в ключ — он автоматически подберется. И держите скриншот того, как выглядит мой ключ.
ДвериПо-началу двери могли только открываться, но это было в начале. Теперь я придумал как позволить им закрываться.
extends StaticBody2D
export (bool) var key_can_used: bool = true
func open():
if !key_can_used: return
self.visible = false
func close():
if !key_can_used: return
self.visible = true
func toggle(vis: bool):
self.visible = vis
Я добавил возможность переключить состояние двери через рычаг. Вот как выглядит сцена в редакторе.
ЗаключениеВ данной статье я рассказал про переключатель, ключи и двери, а также показал улучшенную версию шипов. Следующей будет выпущена пятая часть механик персонажа, следом за которой я расскажу о предметах, которые можно поднять. Спасибо за внимание и удачи.
===========
Источник:
habr.com
===========
Похожие новости:
- [Разработка игр, Unity] Что такое Unity Asset Store и как на нем зарабатывать?
- [Программирование, C++, Работа с 3D-графикой, Разработка игр, CGI (графика)] Vulkan. Руководство разработчика
- [Разработка игр, Godot] Модули и расширения для Godot 3, ссылки и краткий обзор существующих
- [Разработка игр, Прототипирование, Дизайн игр, Godot] Микрокосм, демоверсия
- [Монетизация игр, Разработка игр, Разработка под Android, Смартфоны] Джентльменский набор от Huawei для разработчика мобильных игр: Game Service и инструменты для быстрой интеграции HMS
- [Программирование, Проектирование и рефакторинг, Разработка игр] Как мы пришли к реактивному связыванию в Unity3D
- [JavaScript, Разработка игр, TypeScript, Логические игры] DagazServer: Как всё устроено
- [Разработка игр, Производство и разработка электроники, Компьютерное железо, Игры и игровые приставки] Ажиотажный спрос на новые карты Nvidia — заслуга не производителя, а косоруких разработчиков игр
- [Разработка игр, Развитие стартапа, Разработка мобильных приложений, Продвижение игр] Финляндия для разработчиков игр: маленькая страна с большими возможностями
- [Godot, Разработка игр] Механики для реализации платформера на Godot engine. 4 часть
Теги для поиска: #_razrabotka_igr (Разработка игр), #_dizajn_igr (Дизайн игр), #_godot, #_gdscript, #_programmirovanie_igr (программирование игр), #_razrabotka_igr (
Разработка игр
), #_dizajn_igr (
Дизайн игр
), #_godot
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 18:59
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Приветствую вас во второй части механик ловушек и интерактивных объектов в Godot Engine. Я решил пока-что выпустить эту часть, чтобы выпустить эту часть, чтобы показать механики, которые отвечают за направление уровня в играх. Я имею в виду двери, ключи и движущиеся платформы. В данном случае движущиеся по желанию игрока. Такие платформы можно будет ронять, использовать как мост и другое.Для того чтобы всё работало мы будем использовать NodePath. Только в этом случае не для перемещения игрока, а для перемещения объектов относительно текущего положения.Предыдущие статьи: ПереключательДля начала создадим переключатель. Это будет Area2D со спрайтом и коллизией. Он будет иметь метод interact(_interactor: Node), для того чтобы взаимодействовать с другими объектами, на которые будет указывать NodePath. Вот скрипт этого переключателя: tool
extends Area2D export (NodePath) var dependent_node: NodePath export (bool) var toggle: bool = false var prev_toggle: bool = false func _process(_delta: float) -> void: if prev_toggle != toggle: # Отвечает за воспроизведение нужной анимации. Нуждается в доработке if toggle == true: $AnimatedSprite.play("toggle_on") else: $AnimatedSprite.play("toggle_off") prev_toggle = toggle func interact(_interactor: Node) -> void: if !$AnimatedSprite.is_playing(): # Если Анимация воспроизводится и есть метод "toggle" у dependent_bode if get_node(dependent_node).has_method("toggle"): self.toggle = !self.toggle # поменять значение toggle get_node(dependent_node).toggle(toggle) # Вызвать метод toggle у dependent_node и передать toggle Улучшение шиповТеперь вспомните те шипы. Теперь мы улучшим их, чтобы добавить интерактива в игру. Пусть они будут переключаться также рычагом. # Добавьте в конец того скрипта шипов
func toggle(toggled: bool) -> void: self.showed = toggled tool
extends StaticBody2D export var showed = false export (bool) var timer = false var prev_showed = showed func _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 = showed func _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": # Если подобравший ключ - Actor body.key_picked_up() # Вызови метод подбора ключа self.queue_free() # Удалить с поля ключ ДвериПо-началу двери могли только открываться, но это было в начале. Теперь я придумал как позволить им закрываться. extends StaticBody2D
export (bool) var key_can_used: bool = true func open(): if !key_can_used: return self.visible = false func close(): if !key_can_used: return self.visible = true func toggle(vis: bool): self.visible = vis ЗаключениеВ данной статье я рассказал про переключатель, ключи и двери, а также показал улучшенную версию шипов. Следующей будет выпущена пятая часть механик персонажа, следом за которой я расскажу о предметах, которые можно поднять. Спасибо за внимание и удачи. =========== Источник: habr.com =========== Похожие новости:
Разработка игр ), #_dizajn_igr ( Дизайн игр ), #_godot |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 18:59
Часовой пояс: UTC + 5