Cách tạo các cấp độ trong game Godot

Tạo các cấp độ là một khía cạnh quan trọng trong thiết kế game, có thể nâng cao đáng kể trải nghiệm tổng thể của game. Các cấp độ cung cấp cấu trúc và thử thách, giúp người chơi luôn thấy hào hứng và muốn chinh phục các phần tiếp theo.

Godot

Bằng cách chế tạo cẩn thận các cấp độ được thiết kế tốt, bạn có thể tạo trải nghiệm chơi game thú vị, hấp dẫn hơn cho người chơi. Dù là người mới bắt đầu hay là lập trình viên giàu kinh nghiệm, Godot đều có thể giúp bạn dễ dàng tạo ra những cấp độ thu hút người chơi quay lại trở lại game nhiều hơn.

Thiết lập game Godot

Trước khi bắt đầu tạo cấp độ, bạn cần thiết lập dự án game 2D trong Godot Game Engine.

Tạo một cảnh mới và thêm node Node2D làm node gốc. Điều này sẽ hoạt động như container cho tất cả các node khác trong cảnh của bạn. Giờ dự án của bạn đã thiết lập xong, giờ là lúc thêm nhân vật người chơi vào cảnh game cụ thể.

Tạo cảnh mới bằng cách click chuột phải vào bảng Scene và chọn New Scene. Thêm node CharacterBody2D đại diện cho nhân vật người chơi. Node CharacterBody2D cung cấp các tính năng có sẵn để phát hiện chuyển động và va chạm cho nhân vật 2D.

Bên trong node CharacterBody2D, thêm CollisionShape2D với một hình chữ nhật và node Sprite đại diện cho hình ảnh của người chơi.

CharacterBody2D

Sau khi thiết lập nhân vật người chơi và hình ảnh liên quan, giờ bạn có thể tập trung vào tạo cấp độ đầu tiên.

Tạo 2 cấp độ

Tạo các cấp độ trong Godot, bạn có thể dùng ile cảnh (.tscn) để đại diện cho từng cấp độ. Với hai cấp độ, bạn có thể triển khai bố cục độc đáo và nền tảng di động.

Code người chơi

Tập lệnh CharacterBody2D chịu trách nhiệm xử lý chuyển động của người chơi dựa trên input người dùng. Trong GDScript được cung cấp, bạn có thể tính toán hướng chuyển động dựa trên các lần nhấn phím và đặt vận tốc tương ứng cho người chơi.

Tốc độ của người chơi quyết định cách họ di chuyển, và move_and_collide đảm nhận việc phát hiện va chạm.

extends CharacterBody2D

var speed = 300

func _physics_process(delta):
    var input_dir = Vector2.ZERO

    if Input.is_action_pressed("ui_left"):
        input_dir.x -= 1

    if Input.is_action_pressed("ui_right"):
        input_dir.x += 1

    if Input.is_action_pressed("ui_up"):
        input_dir.y -= 1

    if Input.is_action_pressed("ui_down"):
        input_dir.y += 1

    velocity = input_dir.normalized() * speed
    move_and_collide(velocity * delta)

Code platform

Script Platform mở rộng StaticBody2D, điều đó có nghĩa platform sẽ không di chuyển trừ khi bạn áp dụng một chuyển động cho nó. Trong trường hợp này, bạn có thể dùng biến move_speed để kiểm soát tốc độ nền tảng di chuyển.

Nền tảng này di chuyển qua lại theo chiều ngang trong phạm vi cụ thể (100 tới 400 đơn vị ở ví dụ này). Khi chạm vào cạnh, hướng di chuyển sẽ được đảo ngược.

# Chuyển động nền tảng
extends StaticBody2D

const move_speed = 100
var move_direction = Vector2(1, 0)

func _physics_process(delta):
    var platform_movement = move_direction * move_speed * delta
    translate(platform_movement)

    # Thay đổi hướng khi đạt tới cạnh của đường dẫn nền tảng
    if position.x > 400 or position.x < 100:
        move_direction *= -1

Bằng những script này, bạn có thể tạo các mẫu chuyển động thú vị cho platform và thiết kế trải nghiệm gameplay hấp dẫn trong game platformer.

Kết nối các cấp độ

Trong một game điển hình, bạn sẽ muốn người chơi tiến bộ dần từ cấp 1 tới cấp cao hơn. Để làm việc này, triển khai một script Level Manager xử lý chuyển cấp khi người chơi vượt qua đường viền màn hình.

Script Level Manager theo dõi số cấp độ hiện tại và kích thước màn hình. Nó tải cấp ban đầu (cấp 1) trong khi _ready(). Hàm load_level lấy số cấp độ làm input, xây dựng đường dẫn tới file scene tương ứng, và khởi tạo cảnh của cấp độ.

Thêm cấp độ mới làm con của Level Manager. Điều này sẽ giúp chuyển cấp hiện tại hiệu quả.

extends Node2D

var level_number = 1
var screen_size = Vector2()
var is_switching_level = false

func _ready():
    screen_size = get_viewport_rect().size
    load_level(level_number)

func load_level(level):
    var level_path = "res://Level" + str(level) + ".tscn"
    var level_scene = load(level_path)
    var level_instance = level_scene.instantiate()
    add_child(level_instance)
    is_switching_level = false

func switch_level():
    if is_switching_level:
        return

    is_switching_level = true
    level_number += 1

    if level_number > 2:
        level_number = 1

    # Assuming the player node is named "Player"
    var player = get_node("Node2D/Player")

    if player:
        var player_position = player.position

        if player_position.x < 0:
            player.position.x = screen_size.x
        elif player_position.x > screen_size.x:
            player.position.x = 0
        elif player_position.y < 0:
            player.position.y = screen_size.y
        elif player_position.y > screen_size.y:
            player.position.y = 0

    get_node("Node2D").queue_free()
    load_level(level_number)

func _process(delta):
    # Check if the player crosses the screen boundary
    # Assuming the player node is named "Player"
    var player = get_node("Node2D/Player")

    if player:
        var player_position = player.position
        var condition1 = player_position.x < 0
        var condition2 = player_position.x > screen_size.x
        var condition3 = player_position.y < 0
        var condition4 = player_position.y > screen_size.y

        if condition1 or condition2 or condition3 or condition4 :
            switch_level()

Bằng cách triển khai Level Manager, bạn có thể chuyển tiếp liền mạch giữa các cấp độ và duy trì dữ liệu người chơi giữa các cấp, đảm bảo trải nghiệm chơi game mượt mà.

Trên đây là cách tạo cấp độ chơi game trong Godot. Hi vọng bài viết hữu ích với các bạn.

Thứ Hai, 14/08/2023 17:17
31 👨 176
0 Bình luận
Sắp xếp theo