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ù trong Godot
Đầu tiên chúng ta sẽ tạo 1 nút KinematicBody2D đổi tên thành enemy. Ở enemy > thêm AnimatedSprite vì nó thuộc dạng 1 và Collision cho nó như bình thường.
Nếu bạn nào đang sài asset của Rathuuich 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
Ở đây ảnh mờ các bạn Import lại nha
Mình đã import lại và nhìn ok hơn
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
const vitri = 1 const chuyendong = vector2 const tocdo = tùy bạn const trongluc = tùy bạn const 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
Code chuyển động vật lý
Tiếp theo chúng ta sẽ tạo hàm chuyển động vật lý
Và sẽ code như sau
Gán chuyendong trục x = với tocdo * với vitri (* để tốc độ dương ở bên phải và tốc độ âm sẽ ở bên trái)
Gọi animation vừa tạo ở trên: $AnimatedSprite.play(“tênanmation’)
Gán chuyendong trục y += trongluc
Và gọi lệnh move_and_slide để kẻ thù có thể di chuyển.
Và ở đây chúng ta sẽ cần 1 hàm để kẻ thù phát hiện wall và nó sẽ di chuyển ngược lại.
VD: Kẻ thù di chuyển đến tường, sau đó detects cái tường đó rồi nó sẽ di chuyển ngược lại.Giống như là bạn đến bức tường rồi thì bạn sẽ quay đầu lại đơn giản là thế.
Và chúng ta sẽ xài lệnh if để check tường: if is_on_wall():
ở trong if wall sẽ là: vitri = vitri * -1
Ở trên các bạn đã thấy tocdo * vitri
thì tốc độ dương ở bên phải và tốc độ âm sẽ ở bên trái vậy khi vitri * với -1 thì nó sẽ đảo lại và kẻ thù sẽ di chuyển ngược lại khi đụng tường và đúng tiếp thì ngược lại.
Và đã thành công nhưng các bạn để ý là cái con kẻ thù của chúng ta nó không chuyển hướng mà giữ mãi 1 hướng và giờ chúng ta sẽ chỉnh lại nha
Các bạn code như sau
if vitri == 1:
(vitri = 1 = số dương mà số dương = di chuyển sang phải)
$AnimatedSprite.flip_h = false
(flip_h là lệnh dùng để xoay hướng sprite sang phải hoặc trái)
else:
(ngược lại cái trên)
$AnimatedSprite.flip_h = true
(flip_h = false là nó sẽ không xoay sẽ giữ nguyên,true = ngược lại)
Và nó đã di chuyển ngược lại
Oke vậy là xong phần 1 tạo kẻ thù cho nhân vật. Phần 2 sẽ giúp các bạn code kẻ thù di chuyển qua lại trên map như ảnh dưới
Khi các bạn tạo những khối đó kẻ thù sẽ không di chuyển qua lại và đó là lý do mà sẽ có Phần 2
Và Phần 3 sẽ giúp các bạn tạo, hp,damage cho kẻ thù^^.