Trong phần này mình sẽ hướng dẫn bạn cách thu thập đồng xu như các game platformer khác với Godot.
| Tham gia kênh Telegram của AnonyViet 👉 Link 👈 |
Art
Tải xuống
Như thường lệ, mình sẽ cung cấp sẵn art.
Bạn có thể tải xuống ở link này: Rotating Coin
Cài đặt
![[Tạo 2D Platformer Game với Godot] Phần 16: Thu thập đồng xu 22 [Tạo 2D Platformer Game với Godot] Phần 16: Thu thập đồng xu](https://anonyviet.com/wp-content/uploads/2021/11/15-11-2021-11-57-51.png)
Bạn tạo 1 thư mục mới tên là VatPham ở Folder Assets rồi copy cái Fill Coins.png ở trong file zip tải ở trên.
Hoặc bạn nào đã có kiến thức đủ thì có thể sử dụng hình ảnh khác.
Đồng xu
Add scene
![[Tạo 2D Platformer Game với Godot] Phần 16: Thu thập đồng xu 23 [Tạo 2D Platformer Game với Godot] Phần 16: Thu thập đồng xu 19](https://anonyviet.com/wp-content/uploads/2021/11/15-11-2021-11-50-37.png)
Bạn tạo 1 scene mới và Area2D là node gốc -> rename thành DongXu sau đó bạn thêm 2 node như ảnh.
Ở đây, mình dùng Area2D vì mình muốn khi Player chạm vào thì đồng xu xác định và biến mất luôn chứ không dùng các node khác làm gì cho lằng nhằng.
![[Tạo 2D Platformer Game với Godot] Phần 16: Thu thập đồng xu 24 [Tạo 2D Platformer Game với Godot] Phần 16: Thu thập đồng xu 20](https://anonyviet.com/wp-content/uploads/2021/11/15-11-2021-11-57-14.png)
Sau đó bạn add animation mới và kéo ảnh vào theo thứ tự 1- > 8 ( và bỏ số 5 ra ).
![[Tạo 2D Platformer Game với Godot] Phần 16: Thu thập đồng xu 25 [Tạo 2D Platformer Game với Godot] Phần 16: Thu thập đồng xu 21](https://anonyviet.com/wp-content/uploads/2021/11/16-11-2021-12-05-02.png)
Bật playing ở animatedsprite để nó luôn chạy animation.
![[Tạo 2D Platformer Game với Godot] Phần 16: Thu thập đồng xu 26 [Tạo 2D Platformer Game với Godot] Phần 16: Thu thập đồng xu 22](https://anonyviet.com/wp-content/uploads/2021/11/16-11-2021-12-03-23.png)
Rồi add collisionshape2d cho nó.
![[Tạo 2D Platformer Game với Godot] Phần 16: Thu thập đồng xu 27 [Tạo 2D Platformer Game với Godot] Phần 16: Thu thập đồng xu 23](https://anonyviet.com/wp-content/uploads/2021/11/16-11-2021-12-02-48.png)
Sau đó save scene lại và add thêm cái script cho nó.
![[Tạo 2D Platformer Game với Godot] Phần 16: Thu thập đồng xu 28 [Tạo 2D Platformer Game với Godot] Phần 16: Thu thập đồng xu 24](https://anonyviet.com/wp-content/uploads/2021/11/16-11-2021-12-19-37.png)
Sau chỉnh lại scale như ảnh vì nó khá là to.
Script
![[Tạo 2D Platformer Game với Godot] Phần 16: Thu thập đồng xu 30 [Tạo 2D Platformer Game với Godot] Phần 16: Thu thập đồng xu 26](https://anonyviet.com/wp-content/uploads/2021/11/16-11-2021-12-04-27.png)
Bạn connect cái tín hiệu là body_entered vì mình muốn check nếu player đi vào thì đồng xu biến mất và số lượng xu ở player tăng lên.
extends Area2D
func _on_DongXu_body_entered(body):
if body.name == "Player":
body.dongxu += 1
queue_free()
pass # Replace with function body
Do đó, mình sẽ có đoạn code là như này ở script của đồng xu.
Player
Script
var dongxu = 0
Và ở script của player thì mình chỉ cần add thêm 1 dòng đó là var dongxu = 0.
func _process(delta):
$GUI/DongXu.text = str("Dong xu:" + dongxu)
Sau đó mình thêm 1 hàm nữa là _process() mình sử dụng nó là để chạy các vấn đề không liên quan tới vật lý, hàm này sẽ xử lý nhanh hơn so với physics process.
$GUI/DongXu.text = str(dongxu) là mình sẽ gán text của node DongXu = với giá trị của biến dongxu.
Lưu ý: khi gán 1 giá trị nào đó vào text của 1 node nào đó bạn luôn phải bỏ trong str() nếu không sẽ bị lỗi vì nếu đã gọi .text thì chỉ có String mới được chấp nhận.
Scene
Tiếp đó, mình phải add thêm 1 cái gọi là để hiển thị số đồng xu ra bên ngoài màn hình cho người chơi biết được.
![[Tạo 2D Platformer Game với Godot] Phần 16: Thu thập đồng xu 31 [Tạo 2D Platformer Game với Godot] Phần 16: Thu thập đồng xu 27](https://anonyviet.com/wp-content/uploads/2021/11/16-11-2021-12-12-30.png)
Thêm cho mình 1 CanvasLayer -> GUI
Một node Label -> DongXu
![[Tạo 2D Platformer Game với Godot] Phần 16: Thu thập đồng xu 32 [Tạo 2D Platformer Game với Godot] Phần 16: Thu thập đồng xu 28](https://anonyviet.com/wp-content/uploads/2021/11/16-11-2021-12-12-37.png)
Ở node label có cái gọi là bảng text và bạn có thể nhập ở đó
![[Tạo 2D Platformer Game với Godot] Phần 16: Thu thập đồng xu 34 [Tạo 2D Platformer Game với Godot] Phần 16: Thu thập đồng xu 30](https://anonyviet.com/wp-content/uploads/2021/11/16-11-2021-12-13-00.png)
Sau đó mình chinh ra góc cho hợp lý.
Map
![[Tạo 2D Platformer Game với Godot] Phần 16: Thu thập đồng xu 35 [Tạo 2D Platformer Game với Godot] Phần 16: Thu thập đồng xu 31](https://anonyviet.com/wp-content/uploads/2021/11/16-11-2021-12-20-22.png)
Sau đó mình sẽ ra ngoài map để Instance.
![[Tạo 2D Platformer Game với Godot] Phần 16: Thu thập đồng xu 36 [Tạo 2D Platformer Game với Godot] Phần 16: Thu thập đồng xu 32](https://anonyviet.com/wp-content/uploads/2021/11/16-11-2021-12-20-52.png)
Đây là kết quả cuối cùng của mình.
![[Tạo 2D Platformer Game với Godot] Phần 16: Thu thập đồng xu 38 [Tạo 2D Platformer Game với Godot] Phần 16: Thu thập đồng xu 34](https://anonyviet.com/wp-content/uploads/2021/11/16-11-2021-12-21-47.png)
Và khi bạn nhặt đồng xu thì nó sẽ hiển thị ở trên chỗ Label.
Tổng Kết
Vậy là đã xong rồi, hẹn các bạn ở bài sau.
Câu hỏi thường gặp
Tôi cần tải xuống tài nguyên nào để tạo đồng xu?
Bạn cần tải xuống tập tin “Rotating Coin” từ liên kết được cung cấp trong bài viết. Tập tin này chứa hình ảnh cần thiết cho hoạt ảnh đồng xu.
Làm thế nào để đồng xu biến mất khi người chơi chạm vào?
Sử dụng một Area2D như node gốc cho đồng xu. Khi người chơi (Player) đi vào Area2D này, hàm `_on_DongXu_body_entered` được gọi, làm cho đồng xu biến mất (`queue_free()`) và tăng số lượng xu của người chơi.
Tôi cần thêm node nào vào scene của Player để hiển thị số lượng đồng xu?
Thêm một CanvasLayer, sau đó thêm một Label vào CanvasLayer. Trong script của Player, cập nhật text của Label này bằng giá trị biến `dongxu` để hiển thị số lượng xu người chơi đang có.





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




