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.
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 15 [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 16 [Tạo 2D Platformer Game với Godot] Phần 25: Tạo Menu khi hết Level 14](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 17 [Tạo 2D Platformer Game với Godot] Phần 25: Tạo Menu khi hết Level 15](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 18 [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-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 19 [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-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 20 [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-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 22 [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-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 23 [Tạo 2D Platformer Game với Godot] Phần 25: Tạo Menu khi hết Level 21](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 24 [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-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 25 [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-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 26 [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-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 27 [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-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 28 [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-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.