Nâng cao trải nghiệm gameplay trong Godot bằng cách xây dựng hệ thống sức khỏe và sát thương. Dưới đây là hướng dẫn chi tiết.
Hệ thống sức khỏe và sát thương cho phép người chơi biết mức độ bị thương và điểm máu hay sức khỏe bị suy giảm khi va chạm với vật cản hoặc kẻ thù. Nó cũng cho pho phép họ khôi phục máu qua các phương thức khác nhau như power-up hoặc gói sức khỏe.
Godot, một công cụ game mã nguồn mở phổ biến, cung cấp giải pháp đơn giản & linh hoạt để triển khai những hệ thống như thế. Bạn có thể dễ dàng tạo game 2D với một nhân vật người chơi, một kẻ thù và một thanh máu để trình bày trực quan sức khỏe/máu của người chơi.
Thiết lập game Godot
Đầu tiên, thiết lập cấu trúc dự án cơ bản trong công cụ game Godot và tạo các node cần thiết.
Tạo một cảnh mới cho nhân vật người chơi. Thêm node KinemacticBody2D. Bên trong nó, thêm CollisionShape2D với một hình chữ nhật đại diện cho hitbox của người chơi. Gắn node Sprite vào KinematicBody2D để hiện nhân vật của người chơi.
# Player.gd
extends KinematicBody2D
const SPEED = 200
var velocity = Vector2.ZERO
var health = 100
func _physics_process(delta):
velocity.x = 0
velocity.y = 0
if Input.is_action_pressed("ui_right"):
velocity.x += SPEED
elif Input.is_action_pressed("ui_left"):
velocity.x -= SPEED
if Input.is_action_pressed("ui_down"):
velocity.y += SPEED
elif Input.is_action_pressed("ui_up"):
velocity.y -= SPEED
move_and_collide(velocity * delta)
Giờ bạn có một nhân vật người chơi cơ bản trong dự án Godot. Bạn có thể di chuyển người chơi bằng các phím mũi tên, nhưng vẫn chưa có hệ thống sức khỏe.
Thiết kế thành phần UI thanh máu
Giờ bạn có thể thêm các thành phần UI để trình bày trực quan sức khỏe của người chơi. Godot cung cấp sẵn một điều khiển tên TextureProgress, hoạt động tốt cho mục đích này.
Tạo node mới cho HUD (màn hình head-up). Thêm node CanvasLayer. Bên trong nó, thêm node TextureProgress. Tùy biến hình ảnh của node TextureProgress theo phong cách và chủ đề của game.
Để hiện thanh máu bằng TextureProgress trong HUD, bạn cần gắn một texture vào nó. TextureProgress dùng hai texture: một cho background và một cho thành phần được lấp đầy (tiến trình).
Trong bảng Inspector, xác định phần Texture. Trong Texture, bạn sẽ tìm thấy thuộc tính tên Under và Over. Click nút Load cho mỗi thuộc tính và chọn ảnh tương ứng.
Gắn một tập lệnh sang cảnh HUD để update thanh máu dựa trên tình trạng sức khỏe của người chơi.
# HUD.gd
extends CanvasLayer
onready var healthBar := $TextureProgress
func _ready():
update_health_bar()
func update_health_bar():
var hb = get_parent().get_node("KinematicBody2D")
healthBar.value = hb.health
Xử lý điểm số máu của người chơi
Để giảm chỉ số máu của người chơi khi họ đi qua đường viền màn hình, bạn có thể thêm một kiểm tra điều kiện bằng lệnh if. Nếu người chơi vượt ra ngoài màn hình, bạn có thể giảm máu của họ. Dưới đây là cách đạt được điều đó:
# player.gd
extends KinematicBody2D
const SPEED = 200
const DAMAGE_AMOUNT = 0.1
var velocity = Vector2.ZERO
var health = 100
# Screen boundaries
var screen_size
var margin = 20
func _ready():
screen_size = get_viewport_rect().size
func _physics_process(delta):
# ... (existing movement code)
move_and_collide(velocity * delta)
var c1 = position.x < -margin
var c2 = position.x > screen_size.x + margin
var c3 = position.y < -margin
var c4 = position.y > screen_size.y + margin
# Check if the player is outside the screen boundaries
if c1 or c2 or c3 or c4:
take_damage_on_screen_exit()
func take_damage_on_screen_exit():
health -= DAMAGE_AMOUNT
if health <= 0:
health = 0
# Game over logic here
update_health_ui()
Thêm hàm update_health_ui() trong tập lệnh player.gd để gọi script HUD và update thanh máu.
# Player.gd
extends KinematicBody2D
# ... (other code)
func update_health_ui():
var hud = get_parent().get_node("HUD")
if hud:
hud.update_health_bar()
Với những thay đổi này, người chơi giờ sẽ chịu sát thương khi họ vượt qua viền màn hình. Giao diện thanh máu sẽ update theo.
Trên đây là cách làm hệ thống máu và sát thương cho game được tạo bằng Godot. Hi vọng bài viết hữu ích với các bạn.