W grach i aplikacjach często pojawia się potrzeba wyświetlania oraz ukrywania menu lub interfejsu po naciśnięciu odpowiedniego przycisku. Godot Engine oferuje kilka sposobów realizacji tego problemu, a poniżej opiszę najbardziej praktyczne i efektywne rozwiązania.
Podstawowa metoda z Input
i visible
Najprostszym i najefektywniejszym rozwiązaniem jest użycie funkcji Input.is_action_just_pressed()
oraz właściwości visible
obiektu.
Kod minimalny i czytelny:
extends Node2D
@onready var inventory = $"Inventory" # Ścieżka do menu
func _process(delta: float) -> void:
if Input.is_action_just_pressed("Toggle_Inventory"):
inventory.visible = not inventory.visible
Dlaczego to działa dobrze?
Input.is_action_just_pressed()
wykrywa jedno naciśnięcie klawisza, bez ciągłego wywoływania.inventory.visible = not inventory.visible
jest prostą operacją negacji wartościtrue/false
, dzięki czemu menu zmienia stan (widoczne -> niewidoczne).
Alternatywne rozwiązanie z show()
i hide()
Jeśli preferujesz bardziej czytelny styl, możesz użyć show()
i hide()
zamiast bezpośredniej manipulacji visible
:
extends Node2D
@onready var inventory = $"Inventory"
var inventory_visible = false
func _process(delta: float) -> void:
if Input.is_action_just_pressed("Toggle_Inventory"):
inventory_visible = not inventory_visible
if inventory_visible:
inventory.show()
else:
inventory.hide()
Zalety:
- Czytelny i bardziej rozbudowany kod dla początkujących.
- Możliwość łatwego dodania dodatkowej logiki (np. efektów animacji).
Wady:
- Nieco więcej linijek kodu.
Kompaktowy zapis z operatorem trójargumentowym
Dla osób, które preferują bardzo zwięzły kod, można użyć operatora trójargumentowego (conditional expression):
extends Node2D
@onready var inventory = $"Inventory"
func _process(delta: float) -> void:
if Input.is_action_just_pressed("Toggle_Inventory"):
inventory.show() if inventory.visible == false else inventory.hide()
Uwagi:
if ... else
po wyrażeniu działa, ale jest bardziej zagmatwany dla osób początkujących.- Godot nie wymaga dwukropka po
else
(jak w Pythonie), więc można użyć jednej linii.
Najlepsze rozwiązanie
Najbardziej efektywne i czytelne podejście to:
extends Node2D
@onready var inventory = $"Inventory"
func _process(delta: float) -> void:
if Input.is_action_just_pressed("Toggle_Inventory"):
inventory.visible = not inventory.visible
Dlaczego to najlepsze rozwiązanie?
- Minimalna ilość kodu: Jedna linia zmienia stan widoczności menu.
- Optymalna wydajność: Operacja jest szybka i nie wymaga dodatkowych warunków.
- Czytelność: Logika jest prosta i zrozumiała nawet dla początkujących.
Dodatkowe uwagi
Przypisanie akcji klawisza:
- W edytorze Godot przejdź do Project -> Project Settings -> Input Map.
- Dodaj nową akcję o nazwie
Toggle_Inventory
i przypisz do niej wybrany klawisz, np.Tab
lubI
.
Efekty wizualne:
- Możesz dodać animacje przy wyświetlaniu menu za pomocą
AnimationPlayer
. - Przykład dodania fade-in/fade-out do widoczności menu:
@onready var animation_player = $"AnimationPlayer" func _process(delta: float) -> void: if Input.is_action_just_pressed("Toggle_Inventory"): if inventory.visible: animation_player.play("fade_out") inventory.visible = false else: inventory.visible = true animation_player.play("fade_in")
- Możesz dodać animacje przy wyświetlaniu menu za pomocą
Podsumowanie
Najbardziej efektywne podejście polega na użyciu właściwości visible
i prostej negacji za pomocą not
:
inventory.visible = not inventory.visible
To rozwiązanie jest krótkie, czytelne i wydajne, co sprawia, że idealnie nadaje się do zarządzania widocznością interfejsu w Godot.