Trong phần này, mình sẽ hướng dẫn bạn cách để tạo menu khi ban chơi xong một level và nó sẽ có thể di chuyển sang level kế tiếp, chơi lại và quay về menu Level Map.
| Tham gia kênh Telegram của AnonyViet 👉 Link 👈 |
Menu khi hết level
Copy Scene
Thì thay vì phải tạo lại từ đầu, bạn có thể duplicate 1 scene mới từ scene pause menu.
![[Tạo 2D Platformer Game với Godot] Phần 25: Tạo Menu khi hết Level 19 [Tạo 2D Platformer Game với Godot] Phần 25: Tạo Menu khi hết Level](https://anonyviet.com/wp-content/uploads/2021/11/23-11-2021-10-35-56-300x157.png)
Bạn tìm pause menu ở filesystem chuột phải nhấn duplicate
![[Tạo 2D Platformer Game với Godot] Phần 25: Tạo Menu khi hết Level 20 [Tạo 2D Platformer Game với Godot] Phần 25: Tạo Menu khi hết Level 16](https://anonyviet.com/wp-content/uploads/2021/11/23-11-2021-10-36-15-300x132.png)
![[Tạo 2D Platformer Game với Godot] Phần 25: Tạo Menu khi hết Level 21 [Tạo 2D Platformer Game với Godot] Phần 25: Tạo Menu khi hết Level 17](https://anonyviet.com/wp-content/uploads/2021/11/23-11-2021-10-36-50-300x125.png)
Mình sẽ rename nó lại là EndLevelMenu
![[Tạo 2D Platformer Game với Godot] Phần 25: Tạo Menu khi hết Level 22 [Tạo 2D Platformer Game với Godot] Phần 25: Tạo Menu khi hết Level 18](https://anonyviet.com/wp-content/uploads/2021/11/23-11-2021-10-38-38-295x300.png)
Rồi bạn xoá mấy node kia và chừa lại như hình, mình đổi tên luôn NutTepTuc thành LevelKeTiep
![[Tạo 2D Platformer Game với Godot] Phần 25: Tạo Menu khi hết Level 23 [Tạo 2D Platformer Game với Godot] Phần 25: Tạo Menu khi hết Level 19](https://anonyviet.com/wp-content/uploads/2021/11/23-11-2021-10-47-15.png)
Chỉnh lại text ở TieuDe
![[Tạo 2D Platformer Game với Godot] Phần 25: Tạo Menu khi hết Level 24 [Tạo 2D Platformer Game với Godot] Phần 25: Tạo Menu khi hết Level 20](https://anonyviet.com/wp-content/uploads/2021/11/23-11-2021-10-38-58-300x78.png)
Bạn sẽ clear cái script cũ đi bằng cách nhấn nút có cái tờ giấy mà có dấu x
![[Tạo 2D Platformer Game với Godot] Phần 25: Tạo Menu khi hết Level 26 [Tạo 2D Platformer Game với Godot] Phần 25: Tạo Menu khi hết Level 22](https://anonyviet.com/wp-content/uploads/2021/11/23-11-2021-10-39-50-300x267.png)
Sau đó tạo cái mới.![[Tạo 2D Platformer Game với Godot] Phần 25: Tạo Menu khi hết Level 27 [Tạo 2D Platformer Game với Godot] Phần 25: Tạo Menu khi hết Level 23](https://anonyviet.com/wp-content/uploads/2021/11/23-11-2021-10-40-15-157x300.png)
Rồi 3 cái nút thì bạn disconnect đi vì nó đang kết nối với script cũ.
![[Tạo 2D Platformer Game với Godot] Phần 25: Tạo Menu khi hết Level 28 [Tạo 2D Platformer Game với Godot] Phần 25: Tạo Menu khi hết Level 24](https://anonyviet.com/wp-content/uploads/2021/11/23-11-2021-10-46-34-300x223.png)
Rồi connect lại 3 cái mới.
![[Tạo 2D Platformer Game với Godot] Phần 25: Tạo Menu khi hết Level 29 [Tạo 2D Platformer Game với Godot] Phần 25: Tạo Menu khi hết Level 25](https://anonyviet.com/wp-content/uploads/2021/11/23-11-2021-10-52-50-295x300.png)
Rồi Instance EndLevelMenu vào Map.
Rồi các bạn nhớ là hide cái EndLevelMenu mà thuộc loại Control Node đi ấy.
Script
extends CanvasLayer
onready var level = get_parent().get_node("KhuVucDiChuyen")
func _on_NutLevelKeTiep_pressed():
get_tree().paused = false
get_tree().change_scene(level.LevelKeTiep)
pass # Replace with function body.
func _on_NutChoiLai_pressed():
get_tree().paused = false
get_tree().reload_current_scene()
print("choi lai")
pass # Replace with function body.
func _on_NutVeMenu_pressed():
get_tree().paused = false
get_tree().change_scene("res://Scences/Map/LevelMap.tscn")
pass # Replace with function body.
Đây là đoạn code của script EndLevelMenu.
2 tín hiệu của nút chơi lại và về menu mình sẽ giữ nguyên.
Đối vơi LevelKeTiep để tiết kiệm thời gian thay vì mình phải tự setup coi nó di chuyển đến level nào kế tiếp thì mình sẽ lấy nó luôn. Ở node KhuVucDiChuyen mình đã có tạo 1 biến là LevelKeTiep và nó mang dữ liệu của scene kế tiếp nên là mình sẽ gọi cái biến đó thay vì làm thủ công.
![[Tạo 2D Platformer Game với Godot] Phần 25: Tạo Menu khi hết Level 30 [Tạo 2D Platformer Game với Godot] Phần 25: Tạo Menu khi hết Level 26](https://anonyviet.com/wp-content/uploads/2021/11/23-11-2021-10-57-26-280x300.png)
onready var level = get_parent().get_node("KhuVucDiChuyen"): là mình khai báo xong gán nó bằng nút parent của EndLevelMenu ( như trên ảnh) và từ nút parent đó mình có thể truy cập vào node KhuVucDiChuyen để lấy dữ liệu của biến LevelKeTiep.
extends Area2D
export (String,FILE) var LevelKeTiep
onready var endlevelmenu = get_parent().get_node("EndLevelMenu")
func _on_KhuVucDiChuyen_body_entered(body):
if body.name == "Player":
# get_tree().change_scene(LevelKeTiep)
endlevelmenu.get_node("EndLevelMenu").show()
get_tree().paused = true
Ở phần script của KhuVucDIChuyen mình có đổi lại 1 xíu.
Ở đây, thay vì là di chuyển sang level kế tiếp như thường lệ thì mình sẽ cho nó hiển thị cái EndLevelMenu lên và sau đó thì dừng tree lại như ở pausemenu.
Nếu bạn nào thắc mắc tại sao mình lại get_node() 2 cái EndLevelMenu thì hãy nhìn vào như hình dưới.![[Tạo 2D Platformer Game với Godot] Phần 25: Tạo Menu khi hết Level 31 [Tạo 2D Platformer Game với Godot] Phần 25: Tạo Menu khi hết Level 27](https://anonyviet.com/wp-content/uploads/2021/11/23-11-2021-11-07-38-300x61.png)
Mình gọi 2 cái EndLevelMenu là vì mình có 2 node đó :).
![[Tạo 2D Platformer Game với Godot] Phần 25: Tạo Menu khi hết Level 32 [Tạo 2D Platformer Game với Godot] Phần 25: Tạo Menu khi hết Level 28](https://anonyviet.com/wp-content/uploads/2021/11/23-11-2021-11-13-02.png)
Và đây là kết quả của mình
Tổng Kết
Trong phần tiếp, mình sẽ hướng dẫn bạn cách để thống kê điểm số sau khi thu thập đồng xu và khi ra ngoài LevelMap bạn sẽ có được số sao tương ứng với số điểm.
Câu hỏi thường gặp
Làm sao để tạo menu khi hết level trong Godot?
Bạn có thể tạo một menu mới bằng cách sao chép (duplicate) scene của menu tạm dừng (pause menu), chỉnh sửa nội dung và script cho phù hợp. Sau đó, instance menu này vào scene của level và hiển thị khi người chơi hoàn thành level.
Script nào được sử dụng để điều khiển menu khi hết level?
Script sử dụng các hàm `_on_NutLevelKeTiep_pressed()`, `_on_NutChoiLai_pressed()`, và `_on_NutVeMenu_pressed()` để xử lý các sự kiện nhấn nút “Level Kế Tiếp”, “Chơi Lại” và “Về Menu”. Script khác được sử dụng để kích hoạt hiển thị menu khi người chơi hoàn thành level.
Làm thế nào để chuyển sang level kế tiếp từ menu khi hết level?
Script sử dụng `get_tree().change_scene()` để chuyển đến scene level kế tiếp. Thông tin về scene level kế tiếp được lưu trữ trong biến `LevelKeTiep` trong một node khác của scene level hiện tại.





![[Tạo 2D Platformer Game với Godot] Phần 29: Lưu và load dữ liệu game 38 [Tạo 2D Platformer Game với Godot] Phần 29: Lưu và load dữ liệu game 31](https://anonyviet.com/wp-content/uploads/2021/11/25-11-2021-04-43-13.png)
![[Tạo 2D Platformer Game với Godot] Phần 28: Thêm âm thanh giao diện 39 [Tạo 2D Platformer Game với Godot] Phần 28: Thêm âm thanh giao diện 32](https://anonyviet.com/wp-content/uploads/2021/11/25-11-2021-01-02-39-350x245.png)
![[Tạo 2D Platformer Game với Godot] Phần 27: Mở khoá level 40 [Tạo 2D Platformer Game với Godot] Phần 27: Mở khoá level 33](https://anonyviet.com/wp-content/uploads/2021/11/24-11-2021-12-17-23.png)
![[Tạo 2D Platformer Game với Godot] Phần 24: Tạo Pause Menu 42 [Tạo 2D Platformer Game với Godot] Phần 24: Tạo Pause Menu 35](https://anonyviet.com/wp-content/uploads/2021/11/22-11-2021-02-07-33-283x250.png)





lm ve boss di anh