Tiếp nối series, hôm nay ad sẽ tiếp tục phần 7 đó là di chuyển giữa các level. Có thể hiểu là di chuyển qua lại sửa các sence. Để tìm hiểu sence thì các bạn xem lại từ Bài 0 của Seri lập trình Game bằng Godot. Còn level thì các bạn nào chơi game mmorp thì hiểu nó là cấp độ nhưng trong đây nó là màn chơi. Ví dụ như bạn chơi arngry bird sau màn 1 sẽ thấy màn 2 đó chính là Level mà mình nhắc tới trog đây. Không lằng nhằng nữa chúng ta bắt đầu thôi.
Tham gia kênh Telegram của AnonyViet 👉 Link 👈 |
Tạo Sence Mới
Bước đầu là các bạn tạo cho mình sence mới bằng nút “+” bên cạnh tab sence World
Được như này:
Chọn cho mình Other Node rồi nhấn enter.Lưu ý chọn other node rồi nhấn enter chứ không nhấn bất kì cái gì khác.Nó sẽ cho bạn cái node màu đen
Và chúng ta sẽ cần lưu Node Player và Node Tilemap về dưới dạng .tscn để có thể đưa nó vào sence khác mà không cần làm lại nó.Và tương tự các Node khác như enemy hay trap
Bằng cách sau:
Bạn nhấn chuột phải vào Node Player Và Node Tilemap Chọn cho mình Save Branch As Sence
Có nghĩa là nó sẽ lưu cái node bạn vừa chọn dưới dạng tscn và ở dưới dạng tscn này bạn có thể đưa node của bạn vào bất cứ sence nào mà không cần làm 1 cái khác
Bạn bỏ nó ở đâu cũng được. Nhưng bạn hãy nhớ tạo thư mục chứa các tệp như này cho gọn nhé.
Ở đây mình sẽ lưu ở folder tscn
Ở folder bạn sẽ thấy có 2 tscn vừa mới lưu là Tilemap và Player
Và tiếp đến là Import Tscn vô sence
Chọn cái trong ảnh:
==>
Và ở đây bạn sẽ thấy có 2-4 node tùy vào tscn của bạn thôi.Của mình có 3 cái:
- 1 là Player.
- 2 là TileMap.
- 3 Là Level 1 là World
Các bạn Instance 2 cái là Player và TileMap vô nhé
Và các bạn sẽ thấy nó giống như sence cũ
Lưu ý: Ở tilemap các bạn có thể không cần lưu lại thành tscn nữa chỉ cần tạo node tilemap rồi vở tileset vô và design level mới thôi, nếu bạn muốn sence này khác biệt
À các bạn như lưu sence 2 này lại cho mình là level 2 và lưu vào thư mục nào đó, của mình lưu là ở folder sence và Nhấn Ctrl + S để save
Và dưới đây là level 2 của mình. Tiếp theo chúng ta sẽ tạo object di chuyển giữa các level
Tạo Object Di Chuyển Sence
Để di chuyển giữa các level bạn sẽ cần tạo Object Di Chuyển Sence. Đầu tiên, bạn tạo cho mình node area2D ở sence 1 nhé
Add cho mình 2 cái trongArea 2D
Ở phần Sprite các bạn bỏ ảnh vô và ảnh các bạn có thể kiếm trên mạng
Và đây là ảnh của mình:
Sau khi chạy game
Tiếp đến các bạn tạo cho mình 1 script mới ở Area2D
Rồi code như sau
Ở dưới đây:
Phần export(String,FILE,"*.tscn") var next_world
chính là phần nó sẽ đưa cái này ra ngoài phần setting của node và bạn có thể đưa tscn vào đó để nó trỏ đến
get_overlapping_boides
là 1 hàm giúp bạn check bodies bên trong collsion bodies vào collsion thì nó sẽ làm gì đó.
for body in boides
: cho body trong boides (vừa khai báo ở trên) nghĩa là nếu 1 body bên trong cái boides nó sẽ thực hiện lệnh if ở dưới.body này là 1 lệnh của node này, body ở đây chính là kinematicbody và staticbody
if body.name == player: body.name
nghĩa là body rồi lấy tên của nó nếu bằng Player nó sẽ thực hiện lệnh ở dưới. À cái “Player’ á chính là cái tên node Player của bạn đây nếu cái Node player của bạn tên gì thì phải thay vào “Player” mới hiệu nghiệm.
get_tree.change_sence
đây là 1 lệnh của Godot giúp bạn di chuyển từ sence này sang sence khác còn (next_world) chính là hàm chúng ta khai báo ở trên export.nói cho dễ hiểu ở phần Export nó sẽ cho phép bạn đưa 1 sence vô rồi ở bên dưới nếu player chạm vào cái Object Move Sence thì nó sẽ di chuyển Player đến sence ở phần Export
TIếp, các bạn lưu lại và về sence sẽ thấy có Next World ở Node Area2D bên phải Chỗ Script Variables.
TIếp các bạn nhấn vô cái thư mục ở bên cạnh next world chọn sence thứ 2
Và nó sẽ được
À và chúng ta phải set collsion cho area2D thì Player mới di chuyển sang level khác được nhé
Mình đã set xong và nó đã có thể move sang level khác
Và nếu muốn hay hơn các bạn có thể làm như sau:
Set limit camera bên phải là bao nhiêu đó rồi chỉnh collsion của cái sprite area2d ra sau cái limit của camera. Khi camera đến số bạn đã set nó sẽ không di chuyển nữa và sau khi bạn di chuyển ra sau cái limit camera player sẽ được di chuyển.