Hướng Dẫn Lập Trình Hiệu Ứng Ngày & Đêm Siêu Mượt Trong Scratch
Giới Thiệu: Đừng Để Game Của Bạn Bị “Giật Cục”!
Bạn đang xây dựng một thế giới game mô phỏng (simulation) trong Scratch? Vậy thì việc làm chủ Hiệu Ứng Ngày Đêm là điều bắt buộc. Hầu hết người mới lập trình thường chỉ sử dụng lệnh wait (chờ) hoặc thay đổi nền đột ngột, khiến trải nghiệm người chơi bị kém mượt mà.
Trong bài viết này, mình sẽ hướng dẫn bạn cách áp dụng Thuật toán Easing và Toán học chuẩn hóa để tạo ra chu kỳ thời gian tự động, mượt mà và chính xác như đồng hồ thực tế.
1. ⚙️ Chuẩn Bị & Thiết Lập Biến Số Cốt Lõi
Để dự án hoạt động, chúng ta cần 4 biến số quan trọng. Hãy tạo chúng trong tab Variables (Các biến số) và đặt phạm vi cho Toàn bộ nhân vật (For all sprites).
| Biến số (Variable) | Phạm vi Giá trị | Mục đích & Chức năng |
| Giờ | $0 \text{ đến } 24$ | Lưu trữ giờ mục tiêu (Target Time). |
| Thời gian | $0 \text{ đến } 1$ (Chuẩn hóa) | Giá trị hiện tại đang di chuyển mượt mà. |
| Trời Tối Nhất | $0 \text{ đến } 100$ | Thiết lập giới hạn độ tối đa của hiệu ứng Brightness (ví dụ: $80$). |
| Cấp độ tối | $-100 \text{ đến } 0$ | Giá trị áp dụng trực tiếp cho hiệu ứng Brightness. |
2. ☀️ Lập Trình Nhân Vật Mặt Trời: Thuật Toán Easing
Logic quan trọng nhất nằm ở nhân vật Mặt Trời Mặt Trăng (hoặc một nhân vật điều khiển thời gian bất kỳ). Chúng ta sử dụng Thuật toán Làm Mượt (Easing Algorithm) để điều khiển chuyển động của thời gian.
Công thức Thần thánh:
change [Thời gian v] by ((([Giờ v] / (24)) - [Thời gian v]) / (5))
Giải thích Khối lệnh:
- Chuẩn hóa Giờ (
[Giờ v] / (24)): Chuyển đổi giá trị Giờ (0 đến 24) thành một tỉ lệ tiêu chuẩn 0 đến 1. Đây là Mục tiêu của chúng ta. - Tính Chênh lệch: Trừ đi Thời gian hiện tại (
[Thời gian v]) khỏi Mục tiêu. Nếu khoảng cách xa, giá trị chênh lệch lớn. - Làm Mượt (
/ 5): Chia cho $5$ (hoặc một số khác) để điều chỉnh tốc độ. Khi khoảng cách càng gần, giá trị thay đổi càng nhỏ, khiến vật thể di chuyển chậm lại và dừng chính xác tại mục tiêu.
Khối lệnh Điều khiển Xoay:
Sử dụng giá trị Thời gian đã được làm mượt để điều khiển hướng xoay của Mặt Trời:Đoạn mã
point in direction (([Thời gian v] / (24)) * (360))
3. Lập Trình Nhân Vật Khung Cảnh: Giải Mã Công Thức Độ Sáng
Đây là lúc chúng ta kết nối Vị trí Góc của Mặt Trời với Độ sáng của Khung cảnh (áp dụng cho cả nhân vật Khung cảnh và Sân khấu).
???? Công thức Cấp độ Tối:
set [Cấp độ tối v] to (((abs of (direction of [Mặt Trời Mặt Trăng v])) / (-180)) * ([Trời Tối Nhất v] * (-1))) - [Trời Tối Nhất v]
Giải thích Từng Bước (Toán học Ứng dụng):
| Bước | Khối lệnh | Chức năng (Ý nghĩa) |
| 1. | abs of (direction of...) | Lấy giá trị tuyệt đối của góc (0 đến 180). |
| 2. | / (-180) | Chuẩn hóa tỉ lệ góc thành dải [0, -1]. |
| 3. | * ([Trời Tối Nhất v] * (-1)) | Nhân tỉ lệ này với giá trị âm của độ tối (Ví dụ: -80). Phép nhân Âm * Âm này đảo ngược dải thành [0, 80]. |
| 4. | - [Trời Tối Nhất v] | Dịch chuyển phạm vi 0 đến 80 xuống thành 0 đến -80$. |
- Kết quả: Khi Mặt Trời ở đỉnh (dir = 180), Cấp độ tối là 0 (Sáng). Khi Mặt Trời ở đáy (dir = 0), Cấp độ tối là -80 (Tối).
Áp dụng Hiệu ứng:
Sau khi tính toán, chỉ cần áp dụng kết quả cho hình ảnh:
set [brightness v] effect to [Cấp độ tối v]
Việc làm chủ kỹ thuật Easing và công thức Brightness không chỉ giúp dự án này thành công mà còn mở ra vô số khả năng cho các game mô phỏng thời gian, hiệu ứng ánh sáng, hoặc các thanh máu lấp đầy mượt mà.





