Cách triển khai hệ thống sức khỏe và sát thương trong Godot

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.

Game Godot

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.

Tạo game bằng Godot

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 UnderOver. 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.

Hoàn thành thanh máu cho game tạo bằng Godot

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.

Thứ Sáu, 04/08/2023 16:29
51 👨 106
0 Bình luận
Sắp xếp theo