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.visiblejest 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 ... elsepo 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_Inventoryi przypisz do niej wybrany klawisz, np.TablubI.
- 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.





Dodaj komentarz