[Lập Trình Game] Bài 10: Tạo Kẻ Thù trong game bằng 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ù 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ù

Link download Asset

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ù^^.

Đánh giá post
Exit mobile version