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ù
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 ).
Đâ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.
Mình sẽ chỉnh lại cho nó ngắn hơn và bật nó lên.
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 đó.
Đâ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.
Đâ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.
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ù.