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à AnimatedSprite và CollsionShape2D 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ù
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