Cách thực hiện chu kỳ ngày đêm trong Godot

Spread the love

Chu kỳ ngày đêm có thể thêm yếu tố hấp dẫn vào trò chơi của bạn, tăng thêm sự đa dạng cho hình ảnh và tạo ra cơ chế thú vị. Các trò chơi như Minecraft, Animal Crossing và Don’t Starve sử dụng kỹ thuật này một cách hiệu quả và đây là một trò chơi mà bạn có thể cân nhắc thêm vào trò chơi của riêng mình, đặc biệt là những trò chơi có yếu tố thời gian thực.

May mắn thay, trong Godot 4, việc đạt được chu kỳ ngày đêm trở nên dễ dàng hơn bao giờ hết.

Thiết lập trò chơi Godot

Trước khi đi sâu vào việc triển khai chu kỳ ngày đêm, hãy thiết lập nền tảng cho trò chơi của bạn. Bắt đầu bằng cách tạo một dự án 2D mới trong Godot 4. Thiết lập dự án của bạn với các cài đặt dự án cần thiết.

Mã được sử dụng trong bài viết này có sẵn trong này Kho lưu trữ GitHub và bạn có thể sử dụng miễn phí theo giấy phép MIT.

Bây giờ, hãy tạo một nhân vật người chơi. Trong cảnh của bạn, hãy thêm CharacterBody2D. Bên trong nó, thêm CollisionShape2D có hình chữ nhật và Sprite2D. Điều này sẽ đại diện cho nhân vật của bạn một cách trực quan.

Để cho phép người chơi di chuyển, bạn có thể sử dụng mã GDScript sau. Đính kèm tập lệnh này vào nút ký tự của bạn:

 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)

Mã này sẽ cho phép người chơi di chuyển sang trái, phải, lên và xuống bằng các phím mũi tên. Bạn cũng có thể thêm một số kẻ thù để người chơi của mình né tránh. Sử dụng các nút StaticBody2D cho những kẻ thù này và điều chỉnh hình dạng cũng như vị trí của chúng cho phù hợp.

  11 Dịch vụ lễ tân ảo để quản lý các cuộc gọi đến của bạn

Thêm bộ hẹn giờ cho chu kỳ ngày và đêm

Để tạo chu kỳ ngày đêm, bạn cần có đồng hồ bấm giờ chạy liên tục, xen kẽ giữa các pha ngày và đêm. Bộ đếm thời gian này sẽ chịu trách nhiệm theo dõi thời gian trôi qua trong trò chơi của bạn.

Thêm nút Hẹn giờ vào cảnh Godot của bạn. Bạn có thể thực hiện việc này bằng cách nhấp chuột phải vào bảng Cảnh, chọn Thêm nút, sau đó tìm kiếm Bộ hẹn giờ trong thư viện nút.

Đổi tên nút Hẹn giờ thành tên nào đó có ý nghĩa như DayNightTimer cho rõ ràng. Định cấu hình thuộc tính của nút Hẹn giờ trong bảng Thanh tra. Cụ thể, đặt thuộc tính Thời gian chờ thành 0 (đây là độ trễ ban đầu trước khi bộ hẹn giờ bắt đầu) và kiểm tra thuộc tính One Shot để bộ hẹn giờ lặp lại.

Bây giờ, hãy thêm mã GDScript quản lý chu kỳ ngày đêm:

 extends Node2D

var day_duration = 30
var night_duration = 30

var is_day = true

func _ready():
    
    $DayNightTimer.start()

func _on_DayNightTimer_timeout():
    if is_day:
        
        $DayNightTimer.start(day_duration)
        is_day = false

        
    else:
        
        $DayNightTimer.start(night_duration)
        is_day = true

        

Trong hàm _ready, khởi động DayNightTimer khi cảnh tải để bắt đầu chu kỳ ngày-đêm. Hàm _on_DayNightTimer_timeout sẽ chạy mỗi khi bộ đếm thời gian về 0, đó là lúc chuyển đổi giữa ngày và đêm.

Bằng cách làm theo các bước này, bạn sẽ có một bộ đếm thời gian ngày-đêm có chức năng chuyển đổi giữa ngày và đêm, cho phép bạn thêm các yếu tố lối chơi động và thay đổi hình ảnh vào trò chơi Godot của bạn dựa trên thời gian trong ngày.

  9 Podcast tài chính truyền cảm hứng để hỗ trợ hành trình xây dựng sự giàu có của bạn

Điều chỉnh nền cho ngày và đêm

Để bổ sung cho chu kỳ ngày-đêm của mình, bạn cần một cách thể hiện trực quan sự chuyển đổi giữa ngày và đêm. Bạn có thể sử dụng nút ColorRect tích hợp để tạo nền phù hợp cho cả ngày và đêm. Cách tiếp cận này cho phép chuyển tiếp mượt mà hơn và kiểm soát hình ảnh tốt hơn.

Trong cảnh Godot của bạn, hãy thêm nút ColorRect. Nút này sẽ đóng vai trò là nền thay đổi màu sắc để thể hiện ngày và đêm. Đổi tên nút ColorRect thành một cái gì đó có ý nghĩa như BackgroundRect. Đặt nó làm lớp nền, đảm bảo nó bao phủ toàn bộ khung nhìn.

Trong bảng Thanh tra, đặt thuộc tính Màu thành màu nền ban đầu của bạn, màu này sẽ thể hiện ban ngày. Ví dụ: bạn có thể sử dụng Màu(0,5, 0,5, 0,8) để có bầu trời ban ngày màu xanh nhạt.

Bây giờ, hãy cập nhật mã GDScript của bạn để hoạt động với nút ColorRect:

 func _on_day_night_timer_timeout():
    if is_day:
        
        $DayNightTimer.start(day_duration)
        is_day = false

        

        
        $BackgroundRect.color = Color(0.5, 0.5, 0.8)
    else:
        
        $DayNightTimer.start(night_duration)
        is_day = true

        

        
        $BackgroundRect.color = Color(0, 0, 0)

Cập nhật màu của nút BackgroundRect để phản ánh thời gian trong ngày. Ví dụ: đặt nó thành màu đen khi chuyển sang màn đêm, tạo nền tối. Khi chuyển sang ngày, hãy đặt nó thành màu xanh nhạt.

Hiệu ứng âm thanh cho chu kỳ ngày đêm

Hiệu ứng âm thanh có thể đóng một vai trò quan trọng trong việc tăng cường sự đắm chìm và tính chân thực của chu kỳ ngày đêm của bạn trong Godot. Chúng cung cấp tín hiệu thính giác cho người chơi, khiến quá trình chuyển đổi giữa ngày và đêm trở nên hấp dẫn hơn. Bạn có thể dễ dàng thêm hiệu ứng âm thanh vào trò chơi Godot của mình.

  10 vỏ iPad Pro tốt nhất dưới 100 đô la

Trước khi bắt đầu, hãy đảm bảo rằng bạn có tài nguyên âm thanh (tệp âm thanh) thể hiện âm thanh ngày và đêm. Ví dụ: bạn có thể nghe thấy tiếng chim hót líu lo vào ban ngày và tiếng dế hoặc tiếng cú kêu vào ban đêm.

Trong cảnh Godot của bạn, hãy thêm hai nút AudioStreamPlayer2D và đặt tên cho chúng một cách thích hợp. Bạn có thể đặt tên cho chúng như $DaytimeSounds và $NighttimeSounds.

Bây giờ, hãy cập nhật mã GDScript để quản lý quá trình chuyển đổi âm thanh giữa ngày và đêm:

 func _on_day_night_timer_timeout():
    if is_day:
        
        $DayNightTimer.start(day_duration)
        is_day = false
     
        
        $NighttimeSounds.stop()
        $DaytimeSounds.play()
         
    else:
        
        $DayNightTimer.start(night_duration)
        is_day = true

        
        $DaytimeSounds.stop()
        $NighttimeSounds.play()

Khi bộ hẹn giờ ngày-đêm hết thời gian, mã này sẽ kiểm tra xem nó sẽ chuyển sang giai đoạn nào và phát các âm thanh phù hợp để phù hợp.

Hãy thoải mái tùy chỉnh các hiệu ứng âm thanh không có bản quyền để phù hợp với chủ đề và không khí trò chơi của bạn. Bạn cũng có thể xếp lớp nhiều bản âm thanh hoặc sử dụng hiệu ứng âm thanh (reverb, echo, v.v.) để tạo trải nghiệm thính giác phong phú hơn.

Làm cho trò chơi Godot của bạn hấp dẫn hơn với chu kỳ ngày-đêm

Việc triển khai chu kỳ ngày đêm trong trò chơi Godot của bạn có thể nâng cao đáng kể sự hòa nhập và tương tác của người chơi. Nó bổ sung thêm chiều sâu cho thế giới trò chơi của bạn, giới thiệu các yếu tố lối chơi năng động và cho phép kể chuyện một cách sáng tạo.

Hãy nhớ điều chỉnh chu kỳ ngày-đêm theo chủ đề và cơ chế độc đáo của trò chơi, đồng thời đừng ngần ngại thử nghiệm các hiệu ứng hình ảnh và lối chơi khác nhau để tạo ra trải nghiệm chơi trò chơi thực sự hấp dẫn.

x