Thủ Thuật

[Godot RPG] #3: Tấn Công & Object

Chào mừng các bạn đến với bài 3 trong series lập trình game RPG với Godot :3

Okay , thì trong bài này mình sẽ hướng dẫn các bạn tấn công với animation player & Hitbox & Hurtbox và Object với Godot

Và chúng ta cùng bắt đầu thôi

Tấn Công

Chúng ta sẽ tạo 1 cái Sence mới để làm Hitbox để kiểm tra khi chúng ta tấn công và hurtbox để kiểm tra khi cái hitbox nó va chạm thì mất máu.

Hitbox & HurtBox

Tạo cái Hitbox và nút gốc là Area2D rồi sau đó thêm cái CollisionShape2D là được.

[Godot RPG] #3: Tấn Công & Object 35

Rồi tạo script mới

[Godot RPG] #3: Tấn Công & Object 36

Ở đây mình sẽ dùng biến export để xuất ra ngoài Inspector cho dễ điều chỉnh cho từng nhân vật. bạn có thể chỉnh ngôn ngữ ở ngoài giao diện của Godot sang tiếng việt cho dễ

[Godot RPG] #3: Tấn Công & Object 37

Rồi lưu lại là xong.

Rồi tạo cái Sence mới là HurtBox sau đó lưu lại như Hitbox thôi và không cần tạo script vì chúng ta sẽ kết nối tín hiệu đến player

[Godot RPG] #3: Tấn Công & Object 38

Nhấn rồi đánh

Chúng ta phải check nếu như nhấn vào thì tấn công chứ. Bạn có thể Edit cái Input nếu lười thì sử dụng như ảnh :vv. Godot có nhiều lựa chọn mà!

[Godot RPG] #3: Tấn Công & Object 39

Rồi sau đó trạng thái sẽ bằng ATTACK.

Ở ATTACK: chúng ta sẽ tạo 1 hàm mới là trangthai_attack sẽ có code chạy animtion attack

[Godot RPG] #3: Tấn Công & Object 40

Rồi tiếp theo các bạn gọi nó trên chỗ ATTACK: nhé.

Sau đó khi tấn công chúng ta phải set speed = 0 để khi tấn công nó sẽ không di chuyển

[Godot RPG] #3: Tấn Công & Object 41

Sau khi tấn công xong nó sẽ đứng yên vì nó chưa về trạng thái IDLE vậy nên chúng ta phải set nó về.

Mình sẽ tạo 1 hàm mới

[Godot RPG] #3: Tấn Công & Object 42

Sau đó ở AnimationPlayer > Animation AtTACk > thêm track method(đây là track sẽ chạy hàm Godot có cái này tiện vl :3)

[Godot RPG] #3: Tấn Công & Object 43

Sau đó chọn Player vì Player mới có code mà chạy:D

[Godot RPG] #3: Tấn Công & Object 44

Rồi chọn hàm

[Godot RPG] #3: Tấn Công & Object 45

Rồi chỉnh lại cho về cuối vì khi kết thúc animation = chạy hàm

[Godot RPG] #3: Tấn Công & Object 46

Và vậy là các bạn sẽ di chuyển bình thường lại

Instance & Animation Player

Tiếp theo chúng ta sẽ Instance nó trong Godot. Instance mình cũng chả biết gọi tiếng việt là gì nữa@@.

Sau đó nhấn add 2 cái Hitbox & Hurtbox sau đó nhấn chuột phải vô 2 cái nhấn Editable as children để chúng ta có thể điều chỉnh nó như 1 nút con và để set collishape luôn.

[Godot RPG] #3: Tấn Công & Object 47

À trước đó, chúng ta phải set mask/layer đã. Vô Project > Project Setting > 2D Render / 2D Physics

các bạn set như mình nhé. Set cho cả 2 cái 2D Render và 2D Physics

[Godot RPG] #3: Tấn Công & Object 48

Rồi ở cái Hitbox của player ở bên bảng thuộc tính > collision  thì mình sẽ bỏ tick trong cái Layer và ở cái Mask sẽ tick nó va chạm với Hurtbox_E tức là khi player tấn công nó sẽ va chạm với hurtbox của kẻ thù.

[Godot RPG] #3: Tấn Công & Object 49

[Godot RPG] #3: Tấn Công & Object 50

Rồi ở HurtBox Layer các bạn tick ở ô Hurtbox_P ở phần mask bỏ trống

[Godot RPG] #3: Tấn Công & Object 51

Tiếp đến là chỉnh cái CollisionShape2D của HurtBox sao cho vừa với nhân vật .

[Godot RPG] #3: Tấn Công & Object 52

Rồi tiếp đến sẽ set collisionshape2D của Hitbox với AnimationPlayer.

Ở Collisionshape2D của Hitbox thì nhấn vô cái khoá để add track nhanh

[Godot RPG] #3: Tấn Công & Object 53

[Godot RPG] #3: Tấn Công & Object 54

Sau đó bạn sẽ canh vị trí khi nào nó tấn công để tắt / bật.

Vì nó chưa tấn công nên mình sẽ để Disabled = trueở giây thứ 0 rồi check tiếp mấy giây tiếp theo nếu đến hành động tấn công thì set disable =false rồi sau  khi rút kiếm về thì disabled = true

[Godot RPG] #3: Tấn Công & Object 55

[Godot RPG] #3: Tấn Công & Object 56

Rồi sau đó chạy lại sẽ thấy nó ổn và perfect :33. Mình thích cái này trong Godot cực

Object

Tiếp theo chúng ta sẽ tạo object với Godot.

Link tải: https://elthen.itch.io/pixel-art-destructible-objects

Tạo Sence mới

Ở đây thì tạo:

Area2D > Sprite – CollisionShape2D – AnimationPlayer

[Godot RPG] #3: Tấn Công & Object 57

Ở sprite thì bỏ ảnh vô nhé và mình thấy hơi to các bạn set scale sao cho phù hợp nhé.

Vframes = 12

Hframes = 7

 

[Godot RPG] #3: Tấn Công & Object 58

Mờ thì reimport lại nha.

[Godot RPG] #3: Tấn Công & Object 59

Rồi tiếp theo ở AnimationPlayer tạo 2 animation là Hit và Destroy nhé. Hit là animation khi đánh vào và Destroy là animation khi bị phá huỷ.

Ở đây mình sẽ là cái Thùng  bạn muốn đổi thì cũng được.

Hit : 7-9

Destory:10-13

Ở animation destroy mình sẽ áp dụng cái call method tương tự ở trên nha.

destroy() chứa câu lệnh queue_free()

[Godot RPG] #3: Tấn Công & Object 60

Rồi sau đó tạo script mới. ở đây chúng ta không cần Hitbox hay Hurtbox vì cái thùng này nó đã là 1 nút area2d rồi.

chúng ta sẽ set collisionshape2D cho nó rồi kết nối tín hiệu. nhưng lưu ý nếu làm theo Nút area2D như mình sẽ có bất lợi khi player va chạm với nó. Nếu bạn dùng StaticBody để làm nó rồi thêm Hurtbox vào thì sẽ hoàn chỉnh tốt hơn.

Kết nối tín hiệu Area enterd nhé.

[Godot RPG] #3: Tấn Công & Object 61

mình sẽ tạo biến hp = 10 để có căn mà căn khi player tấn công.

Rồi ở chỗ hàm tín hiệu thì mình sẽ kiểm tra nếu cái tên area  = “Hitbox” thì hp sẽ bằng cái damage của area trừ đi hp. Cái print là mình dùng để kiểm tra hp xem có đánh vào chưa thôi Godot.

[Godot RPG] #3: Tấn Công & Object 62

Rồi set cái Layer lại thành Hurtbox_E và bỏ chọn Mask là được.

[Godot RPG] #3: Tấn Công & Object 63

 

Tiếp đó chúng ta cần kiểm tra nếu player tấn công thì sẽ chậynimation hit và khi hết máu chạy animation destroy

Ở đây mình sẽ hàm _process(): để kiểm tra mỗi giây nếu hp <= 0 thì sẽ chạy animation rồi tự huỷ

[Godot RPG] #3: Tấn Công & Object 64

Rồi Tiếp đến để chắc ăn các bạn ở ANimation hit thì nhấn cái khoanh dưới ảnh đểkhi bắt đầu nó chạy animation hit chứko phải destroy nhé

[Godot RPG] #3: Tấn Công & Object 65

Lưu Ý: Object thì lúc đầu mình tạo ngu nên thông cảm :V. Khi chạy game Ọbject sẽ không va chạm được với player nếu muốn bạn phải chỉnh lại thành StaticBody2D hoặc KinematicBody2D rồi add hurtbox > kết nối tín hiệu rồi áp dụng code như trên là được.

Hẹn gặp bạn vào bài sau của Series lập trình game RPG với Godot

 

 

Đánh giá post

Rất Hữu ích

RatHuuIch là Website chia sẻ miễn phí tất cả các kiến thức về công nghệ thông tin. RatHuuIch cung cấp mọi giải pháp về mạng máy tính, phần mềm, đồ họa và MMO.

Bài liên quan

Theo dõi
Thông báo của
guest

0 Góp ý
Phản hồi nội tuyến
Xem tất cả bình luận
Back to top button