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

designnt

Member
Jul 25, 2013
405
1
6
33
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 103


Rồi tạo script mới

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


Ở đâ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 105


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 106


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 107


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 108


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 109


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 110


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 111


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

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


Rồi chọn hàm

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


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 114


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 115


À 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 116


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 117


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


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 119


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 120


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 121


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


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 123


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


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 125


Ở 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 126


Mờ thì reimport lại nha.

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


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 128


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 129


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 130


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 131


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 132


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 133


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

Sưu tầm và Tổng hợp
www.hanoiyeu.com