Tạo 2D Platformer Game với Godot] Phần 8: Thiết kế kẻ thù

Trong phần trước mình đã hướng dẫn bạn cách tạo một con kẻ thù cơ bản nhất, thì trong phần này mình sẽ chỉ các bạn cách để kẻ thù di chuyển trên 1 bề mặt nổi.

Kẻ thù

Tạo 2D Platformer Game với Godot] Phần 8: Thiết kế kẻ thù

Với cái bề mặt như trên, mình đảm bảo rằng khi con kẻ thù của bạn di chuyển tới một trong hai góc ngoài thì nó sẽ bị rớt xuống mà thường các game platformet là khi nó di chuyển tới góc nó sẽ quay trở lại như và chạm vào cái tường ở phần trước ấy.

Cho nên trong phần này mình sẽ hướng dẫn bạn cách làm điều này.

Add node

Đầu tiên, bạn thêm cho mình một node mới là RayCast2D ( đây là node dùng để truy vấn các mục tiêu va chạm với tia ).Tạo 2D Platformer Game với Godot] Phần 8: Thiết kế kẻ thù 13

Đây chính là tia raycast  và mình sẽ sử dụng nó để kiểm tra xem nếu đã tới cái góc thì mình sẽ kêu con kẻ thù quay lại.Tạo 2D Platformer Game với Godot] Phần 8: Thiết kế kẻ thù 14

Mình sẽ chỉnh lại cho nó ngắn hơn và bật nó lên.

Tạo 2D Platformer Game với Godot] Phần 8: Thiết kế kẻ thù 15

 

func _physics_process(delta):
    
    chuyendong.x = tocdo * huong_dichuyen
    chuyendong.y += trongluc
    chuyendong = move_and_slide(chuyendong,Vector2.UP)
    animation.play("dichuyen")
    
    if is_on_wall():
        huong_dichuyen = huong_dichuyen * -1
        scale.x = scale.y * huong_dichuyen
    
    if $RayCast2D.is_colliding() == false:
        huong_dichuyen = huong_dichuyen * -1
        scale.x = scale.y * huong_dichuyen

Ở đây, mình chỉ thêm 3 dòng code thôi chứ không thêm gì nhiều cả.

Đầu tiên, dòng if:

  • Là mình sẽ gọi cái node raycast và kiểm tra xem nó có đang va chạm với cái gì không, nếu không thì tức là mình đã tới góc thì quay lại.
  • 2 dòng còn lại là dùng để xoay con kẻ thù thôi.
  • cái dòng scale.x = … thực ra bạn có thể bỏ bên ngoài if luôn chứ không cần bỏ trong hàm nhưng mình không làm vậy vì để tối ưu hoá nó, mình bỏ trong lệnh if cho nên là khi xảy ra nó mới chạy còn nếu bỏ ngoài thì lúc nào cũng chạy -> kết quả là gì thì bạn cũng đoán được rồi đó.

Tạo 2D Platformer Game với Godot] Phần 8: Thiết kế kẻ thù 16

Đây là kết quả sau khi mình chạy game.

Cách hoạt động

Nếu bạn chưa hiểu thì mình sẽ giải thích cụ thể hơn ở đây nha.Tạo 2D Platformer Game với Godot] Phần 8: Thiết kế kẻ thù 17

Đây là cái con kẻ thù khi nó chưa ra góc, và cái Raycast nó đang va chạm với tilemap như trong hình.

Tạo 2D Platformer Game với Godot] Phần 8: Thiết kế kẻ thù 18

Còn đây là kẻ thù khi ra tới góc, bạn thấy đó cái raycast đã ra khỏi bên ngoài cái tilemap ( raycast va chạm tính ở góc nhọn của cái mũi tên), khi nó ra ngoài rồi là nó sẽ không va chạm với cái gì nữa mà ở trong phần script mình đã thêm 1 đoạn if để kiểm tra nếu như nó không va chạm thì quay lại.

Tổng Kết

Vậy là mình đã hướng dẫn bạn xong cách tạo 1 con nhân vật cơ bản nhất, ở phần tiếp theo sẽ là di chuyển giữa level, giết kẻ thù.

 

Previous Post Next Post