[Lập Trình Game] Bài 10: Tạo Kẻ Thù trong lập trình Godot – Phần 1

Trong bài này mình sẽ hướng dẫn các bạn tạo kẻ thù cho nhân vật của chúng ta bằng Rathuuich.com/?s=godot” target=”_blank” rel=”noopener noreferrer” class=”local-link”>lập trình game Godot. Kẻ thù sẽ làm cho nhân vật bị mất máu hoặc bạn phải chiến đấu với kẻ thù. Và phần này có vài đoạn có thể là sẽ rất rất khó và không thành công nên mấy bạn chuẩn bị tâm lý nha.

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

Tạo kẻ thủ

Đầu  tiên tạo Sence mới và bao gồm kinematicbody 2D  nút con là AnimatedSpriteCollsionShape2D rồi nhấn Ctrl + S lưu lại.

Rathuuich.com/wp-content/uploads/2020/04/image001.jpg” class=”local-link”>Rathuuich.com/wp-content/uploads/2020/04/image001.jpg” alt=”Tạo Kẻ Thù trong lập trình Godot” width=”780″ height=”463″ title=”[Lập Trình Game] Bài 10: Tạo Kẻ Thù trong lập trình Godot – Phần 1 15″ srcset=”https://Rathuuich.com/wp-content/uploads/2020/04/image001.jpg 780w, https://Rathuuich.com/wp-content/uploads/2020/04/image001-300×178.jpg 300w, https://anonyviet.com/wp-content/uploads/2020/04/image001-768×456.jpg 768w, https://anonyviet.com/wp-content/uploads/2020/04/image001-750×445.jpg 750w” sizes=”(max-width: 780px) 100vw, 780px”>

Nếu bạn nào đang sài asset của anonyviet thì có asset của enemy ở: asset-player > NPC > asset kẻ thù

Link download Asset

Chọn cái nào cũng được.

Tạo SpriteFrame mới

Tạo Animation là move

Nếu ảnh mờ các bạn Import lại nha

Tiếp theo set collision cho nó, ở đây mình set bên dưới không set bên trên để phần trên có thể để nhân vật nhảy lên mà tiêu diệt nó

Lock nó lại và tạo script mới và script này sẽ có tên là enemy

Chúng ta sẽ tạo thêm những biến sau

var Vitri = 1
var  vantoc = Vector2.ZERO //hoặc Vector2() đều giống như nhau
var  Tocdo = tùy bạn
var Trongluc = tùy bạn
var  FLOOR = Vector2(0,-1)

ở đây const là câu lệnh dùng để lock số lại, nghĩa là khi bạn khai báo biến với const thì nó sẽ khóa số đó lại và không bao giờ có thể chỉnh sửa giá trị của nó được.

Tiếp theo chúng ta sẽ tạo hàm chuyển động vật lý

Và sẽ code như sau

Gán trọng lực cho nó

vantoc.y  =  trongluc

Gán tốc độ cho nó

vantoc.x  += tocdo * delta * vitri  (Ở đây * delta để giảm tốc độ của kẻ thù)

Thêm câu lệnh move_and_slide để có thể di chuyển

vantoc = move_and_slide(vantoc)

Tiếp theo bạn sẽ instance nó ra ngoài sence của chúng ta:

Và instance nó ra

Chạy game các bạn sẽ thấy nó di chuyển

ở  đây mình để chế độ nhìn thấy collsionshape nên không có gì đâu nha

Tiếp theo chúng ta sẽ code để nó có thể di chuyển sang trái, và animation

Và ở đây mình sẽ có 1 lệnh là:

if is_on_wall() : is_on_wall() là câu lệnh chả về true (là trả về đúng)  nếu Body có ở trên Wall, và nó chỉ thực hiên khi được gọi bằng move_and_slide

Và tiếp theo bên dưới if is_on_wall() chúng ta sẽ code thêm 1 dòng là:

vitri = vitri * -1 và dòng này khi chạm 1 cái gì đó vitri đang là 1 thì nó sẽ * -1 và nó sẽ di chuyển ngược lại

À và các bạn chạy game lên thấy nhân vật chạy chậm thì kiểm tra ở move_and_slide đã có FLOOR chưa nhé nếu chưa thì thêm vào nếu có rồi mà vẫn chậm thì chỉnh lại speed tầm 20-30

Và tiếp theo chúng ta sẽ code animation cho nó nhé

if vitri == 1:
$AnimatedSprite.flip_h = false
else:
$AnimatedSprite.flip_h = true

2 dòng trên là 2 dòng sẽ thay đổi hình ảnh của kẻ thù, flip_h = false là ảnh sẽ lật sang phải còn flip_h = true là sang trái

if vitri == 1 : nghĩa là vị trí đang bằng 1 mà = 1 thì nó sẽ di chuyển sang phải mà con enemy của chún ta di chuyển sang phải đầu tiên nên flip_h sẽ = false

Và ngược lại

Rồi các bạn gọi animation move cho mình nhé

$AnimatedSprite.play("Move")

Của mình sau khi chạy game đã ổn

Và bài sau mình sẽ hướng dẫn các bạn tạo raycast để kẻ thù có thể di chuyển trên tilemap như dưới ảnh mà ko bị rớt

Đánh giá post
Exit mobile version