nói dối e blog

Biên Dịch Lười Dữ Liệu Trong Hệ Thống Tập Tin Ảo

Kỳ trước, tôi đã viết về hệ thống tập tin ảo (Virtual File System - VFS) được thiết kế cho engine game của chúng tôi. Trong hệ thống này, phương pháp quản lý tài nguyên game có một số điểm thiết kế đặc biệt thú vị mà tôi muốn chia sẻ kỹ hơn ở bài viết này.

Mục tiêu thiết kế VFS
VFS ra đời với mục đích thuận tiện đồng bộ dữ liệu từ ổ cứng máy phát triển sang thiết bị thực thi (thường là điện thoại di động). Trong các engine game truyền thống, phương pháp phổ biến là xây dựng một kho tài nguyên (asset repository) được cập nhật liên tục trong giai đoạn phát triển. Khi cần triển khai game lên thiết bị, toàn bộ kho tài nguyên này sẽ được đóng gói và tải lên. Vì các engine cổ điển thường chạy trực tiếp trên máy phát triển trong quá trình lập trình, việc tải lên (upload) dữ liệu tài nguyên không diễn ra thường xuyên.

Cách Truyền Dữ Liệu Giữa Các Module C Trong Lua

Lua có hệ thống kiểu dữ liệu tương đối hạn chế, đồng thời hệ sinh thái các module C mở rộng cho Lua cũng thiếu tính thống nhất. Điều này khiến việc truyền các khối bộ nhớ giữa các module trở thành một vấn đề nan giải.

Phương pháp phổ biến nhất là sử dụng kiểu string dựng sẵn của Lua để biểu diễn khối nhớ. Ví dụ điển hình là thư viện I/O gốc của Lua - các hàm đọc file đều trả về chuỗi. Tuy nhiên cách này gây ra chi phí sao chép bộ nhớ không cần thiết. Khi bạn xây dựng một chương trình xử lý file bằng Lua, dù các hàm xử lý có được viết bằng C đi chăng nữa, hàng loạt chuỗi tạm thời vẫn sẽ bị tạo ra và tiêu tốn tài nguyên.

Hệ Thống Vá Và Cập Nhật Gói Dữ Liệu Trò Chơi

Động cơ trò chơi của chúng tôi được xây dựng dựa trên hệ thống tệp ảo (VFS), cho phép ánh xạ thư mục từ máy phát triển lên thiết bị di động thông qua mạng. Điều này mang lại sự tiện lợi lớn trong quá trình phát triển - chỉ cần chỉnh sửa tài nguyên trên máy tính cá nhân, lập tức thay đổi sẽ được phản ánh trên thiết bị di động. Tuy nhiên, khi trò chơi chính thức phát hành (đây là công việc chúng tôi đang chuẩn bị), chúng tôi cần đóng gói toàn bộ tài nguyên và thực hiện cập nhật theo phương thức tải xuống bản vá toàn phần khi có phiên bản mới.

Mô-Đun Quản Lý Texture Và Mô Hình 3D Trên Giao Diện Người Dùng

Giao diện người dùng (UI) trong động cơ game của chúng tôi được xây dựng dựa trên công nghệ tương tự như HTML/CSS, cụ thể là phiên bản fork và tự phát triển từ RmlUI. Một yêu cầu phổ biến trong các dự án game hiện tại là tích hợp mô hình 3D như một thành phần UI. Tôi đã từng gặp yêu cầu này trong nhiều dự án trước đây và chứng kiến nhiều cách tiếp cận khác nhau tùy theo động cơ game.

Hai Cải Tiến Tương Tác Trong Game Di Động

Gần đây, tôi dành nhiều thời gian trải nghiệm game đang phát triển trên nền tảng di động (trước đây chủ yếu chạy trên Windows) và nhận thấy nhiều điểm tương tác cần tối ưu. Dưới đây là hai thay đổi đáng chú ý giúp nâng cao trải nghiệm người dùng.

1. Giải quyết vấn đề chọn vật thể nhỏ trên màn hình cảm ứng

Trong các game có giao diện 3D, việc chạm chính xác vào các vật thể nhỏ luôn là thách thức. Năm ngoái, chúng tôi đã áp dụng giải pháp “chạm lặp” – khi người chơi nhấn liên tiếp vào cùng một vị trí, hệ thống sẽ lần lượt đánh dấu các vật thể gần đó. Cơ chế này giúp chọn đúng mục tiêu khi các vật thể chồng lấn hoặc tập trung dày đặc, tương tự cách xử lý trong game RimWorld với các ô lưới chứa nhiều phần tử.

Hệ Thống Tập Tin Ảo Của Động Cơ Game

Động cơ game hiện tại mà chúng tôi đang sử dụng đã bắt đầu được phát triển từ năm 2018. Ngay từ đầu, nó được định hướng trở thành một công cụ game chủ yếu dành cho nền tảng di động, đặt tính tiện lợi cho lập trình di động làm ưu tiên hàng đầu. Vì rõ ràng chúng ta không thể trực tiếp viết code hay tạo tài nguyên trên thiết bị di động, môi trường phát triển và môi trường chạy game luôn được tách biệt. Ngay từ giai đoạn đầu, nhóm chúng tôi đã thiết kế một hệ thống tập tin ảo (Virtual File System - VFS) có khả năng ánh xạ hệ thống tập tin từ máy phát triển sang thiết bị di động qua mạng, đồng thời tích hợp chức năng quản lý phiên bản. Nhờ đó, trong quá trình phát triển, hầu hết các chỉnh sửa trên máy phát triển đều có thể phản ánh ngay lập tức lên thiết bị di động.

0%