[Tạo 2D Platformer Game với Godot] Phần 25: Tạo Menu khi hết Level

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.

Bạn tìm pause menu ở filesystem chuột phải nhấn duplicate

 

Mình sẽ rename nó lại là EndLevelMenu

 

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

 

Chỉnh lại text ở TieuDe

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

Sau đó tạo cái mới.

Rồi 3 cái nút thì bạn disconnect đi vì nó đang kết nối với script cũ.

Rồi connect lại 3 cái mới.

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.

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.

Mình gọi 2 cái EndLevelMenu là vì mình có 2 node đó :).

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.

 

 

 

 

Đánh giá post
Exit mobile version