Trong phần này mình sẽ hướng dẫn các ban tạo cái nút để chọn level kiểu như là trong Map level có mấy cái ô level 1,2,3 rồi sau đó chọn để chơi.
| Tham gia kênh Telegram của AnonyViet 👉 Link 👈 |
Chọn Level
Scene![[Tạo 2D Platformer Game với Godot] Phần 23: Chọn Level 25 [Tạo 2D Platformer Game với Godot] Phần 23: Chọn Level](https://anonyviet.com/wp-content/uploads/2021/11/22-11-2021-12-06-28.png)
Bạn tạo cho mình 1 scene mới có Control là node gốc và 1 TextureButton và 3 Texturect.
TextureButton là mình dùng để tạo hình ành cho cái level và tiện thể check nếu được bấm vào.
3 cái Texture Rect là dùng để hiển thị ngôi sao.
![[Tạo 2D Platformer Game với Godot] Phần 23: Chọn Level 26 [Tạo 2D Platformer Game với Godot] Phần 23: Chọn Level 22](https://anonyviet.com/wp-content/uploads/2021/11/22-11-2021-12-09-05.png)
![[Tạo 2D Platformer Game với Godot] Phần 23: Chọn Level 27 [Tạo 2D Platformer Game với Godot] Phần 23: Chọn Level 23](https://anonyviet.com/wp-content/uploads/2021/11/22-11-2021-12-09-26.png)
Bạn copy cái hình tròn ở bên thư mục UI trong Level map vào TextureButton
![[Tạo 2D Platformer Game với Godot] Phần 23: Chọn Level 29 [Tạo 2D Platformer Game với Godot] Phần 23: Chọn Level 25](https://anonyviet.com/wp-content/uploads/2021/11/22-11-2021-12-10-02.png)
Rồi cái Texture Rect thì 3 cái kéo ngôi sao vào.
![[Tạo 2D Platformer Game với Godot] Phần 23: Chọn Level 30 [Tạo 2D Platformer Game với Godot] Phần 23: Chọn Level 26](https://anonyviet.com/wp-content/uploads/2021/11/22-11-2021-12-10-56.png)
Sau đó chỉnh ngôi sao theo thứ tự từ trái qua.
![[Tạo 2D Platformer Game với Godot] Phần 23: Chọn Level 31 [Tạo 2D Platformer Game với Godot] Phần 23: Chọn Level 27](https://anonyviet.com/wp-content/uploads/2021/11/22-11-2021-12-11-45.png)
Sau đó mình rename lại.
![[Tạo 2D Platformer Game với Godot] Phần 23: Chọn Level 32 [Tạo 2D Platformer Game với Godot] Phần 23: Chọn Level 28](https://anonyviet.com/wp-content/uploads/2021/11/22-11-2021-12-13-32.png)
Add thêm 1 cái Label tên là SoLevel để hiển thị Level.
![[Tạo 2D Platformer Game với Godot] Phần 23: Chọn Level 34 [Tạo 2D Platformer Game với Godot] Phần 23: Chọn Level 30](https://anonyviet.com/wp-content/uploads/2021/11/22-11-2021-12-13-52-1.png)
Mình dùng Customs Font ở phần trước.
![[Tạo 2D Platformer Game với Godot] Phần 23: Chọn Level 35 [Tạo 2D Platformer Game với Godot] Phần 23: Chọn Level 31](https://anonyviet.com/wp-content/uploads/2021/11/22-11-2021-12-17-00.png)
Sau đó save scenes lại.
![[Tạo 2D Platformer Game với Godot] Phần 23: Chọn Level 36 [Tạo 2D Platformer Game với Godot] Phần 23: Chọn Level 32](https://anonyviet.com/wp-content/uploads/2021/11/22-11-2021-12-17-56.png)
Rồi add thêm cho nó cái Script.
![[Tạo 2D Platformer Game với Godot] Phần 23: Chọn Level 38 [Tạo 2D Platformer Game với Godot] Phần 23: Chọn Level 34](https://anonyviet.com/wp-content/uploads/2021/11/22-11-2021-12-36-35.png)
Sau đó connect cái signal pressed của HinhTron.
Script
extends Control
export (String) var MapName
export (String,FILE) var Scene
export (String) var Level
onready var ngoisaovang = preload("res://Assets/LevelMap/3 UI/Star1.png")
var SoDiem = 0
func _ready():
$SoLevel.text = Level
func _process(delta):
if SoDiem >= 1 and SoDiem <= 30:
$NgoiSao1.texture = ngoisaovang
elif SoDiem >= 30 and SoDiem <= 95:
$NgoiSao1.texture = ngoisaovang
$NgoiSao2.texture = ngoisaovang
elif SoDiem >= 95:
$NgoiSao1.texture = ngoisaovang
$NgoiSao2.texture = ngoisaovang
$NgoiSao3.texture = ngoisaovang
func _on_HinhTron_pressed():
get_tree().change_scene(Scene)
pass # Replace with function body.
Về phần code mình sẽ có như trên.
![[Tạo 2D Platformer Game với Godot] Phần 23: Chọn Level 39 [Tạo 2D Platformer Game với Godot] Phần 23: Chọn Level 35](https://anonyviet.com/wp-content/uploads/2021/11/22-11-2021-12-29-05.png)
Ở đây mình sẽ dùng export để xuất 3 biến ra Inspector
Và Sodiem ở đây mình sẽ để theo thang đo 100. SoDiem ở đây sẽ được quy ra từ số sao mà bạn thu thập được khi chơi 1 level nếu đủ tất cả sao thì SoDiem là 100 và $NgoiSao1,2,3 sẽ chuyển sang màu vàng.
dòng có onready var là mình dùng để load trước hình ảnh của ngôi sao vàng tức là vừa chạy game thì nó load luôn còn nếu ban dùng load() là khi nào đụng tới thì nó mới load hình ảnh
![[Tạo 2D Platformer Game với Godot] Phần 23: Chọn Level 40 [Tạo 2D Platformer Game với Godot] Phần 23: Chọn Level 36](https://anonyviet.com/wp-content/uploads/2021/11/22-11-2021-12-32-42.png)
Sau đó Instance cái Level vừa tạo vào LevelMap.
![[Tạo 2D Platformer Game với Godot] Phần 23: Chọn Level 42 [Tạo 2D Platformer Game với Godot] Phần 23: Chọn Level 38](https://anonyviet.com/wp-content/uploads/2021/11/22-11-2021-12-33-46.png)
Bạn điền thông tin vào.
MapName là tên của node gốc của cái Scene ở bên dưới.
Scene là bạn chọn scene của level đó.
Level là dùng để hiển thị level.
![[Tạo 2D Platformer Game với Godot] Phần 23: Chọn Level 43 [Tạo 2D Platformer Game với Godot] Phần 23: Chọn Level 39](https://anonyviet.com/wp-content/uploads/2021/11/22-11-2021-12-33-59.png)
MapName bằng tên node gốc nha.
![[Tạo 2D Platformer Game với Godot] Phần 23: Chọn Level 44 [Tạo 2D Platformer Game với Godot] Phần 23: Chọn Level 40](https://anonyviet.com/wp-content/uploads/2021/11/22-11-2021-12-40-51.png)
Và sau khi chạy game mình sẽ có kết quả nó được như trên.
Sau khi nhấn vào đó mình sẽ được đi chuyển tới Level 1.
Tổng kết
Ở trong phần sau mình sẽ hướng dẫn bạn cách để tạo menu dừng và khi chiến thăng 1 level.
Câu hỏi thường gặp
Làm thế nào để tạo nút chọn level trong game?
Bạn cần tạo một scene mới với Node gốc là Control, chứa một TextureButton (cho hình ảnh level) và ba TextureRect (cho các ngôi sao biểu thị độ hoàn thành). Kết nối tín hiệu “pressed” của TextureButton với một hàm trong script để chuyển scene khi nút được nhấn.
Script điều khiển nút chọn level hoạt động như thế nào?
Script sử dụng biến `SoDiem` để theo dõi điểm số và hiển thị số sao tương ứng. Biến `export` cho phép bạn thiết lập tên scene level, đường dẫn scene và số level từ Inspector. Hàm `_on_HinhTron_pressed()` dùng `get_tree().change_scene()` để chuyển đến scene level đã chọn.
Làm sao để hiển thị sao vàng dựa trên điểm số?
Script sử dụng điều kiện `if-elif-else` để kiểm tra giá trị `SoDiem`. Tùy thuộc vào điểm số, các TextureRect (ngôi sao) sẽ được gán texture sao vàng tương ứng, cho biết mức độ hoàn thành của level.





![[Tạo 2D Platformer Game với Godot] Phần 29: Lưu và load dữ liệu game 50 [Tạo 2D Platformer Game với Godot] Phần 29: Lưu và load dữ liệu game 43](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 51 [Tạo 2D Platformer Game với Godot] Phần 28: Thêm âm thanh giao diện 44](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 52 [Tạo 2D Platformer Game với Godot] Phần 27: Mở khoá level 45](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 25: Tạo Menu khi hết Level 54 [Tạo 2D Platformer Game với Godot] Phần 25: Tạo Menu khi hết Level 47](https://anonyviet.com/wp-content/uploads/2021/11/23-11-2021-11-13-02.png)




