nói dối e blog

Thuật Toán Phát Hiện Va Chạm Trong Game Hành Động

Gần đây, tôi bị cuốn vào tựa game Monster Hunter World, chơi qua loa khoảng 100 tiếng. Kể cả thời gian trải nghiệm các phiên bản trước, tổng cộng cũng vài trăm tiếng. Dù không dám tự xưng lão làng, nhưng có thể tự nhận là fan cứng của series này.

Với chuyên môn kỹ thuật, tôi bắt đầu tò mò về cơ chế vận hành bên trong game. Do tài liệu tiếng Việt hiếm hoi, bài viết này sẽ ghi lại cách tôi hình dung hệ thống xác định đòn đánh giữa vũ khí và quái vật. Đây là góc nhìn cá nhân kết hợp tư duy lập trình game.

Đóng Gói Máy Ảo Lua

Trong quá trình phát triển khung kiến trúc engine client, chúng tôi gần đây đã gặp phải hai vấn đề đáng ghi nhận. Đây sẽ là bài viết đầu tiên đề cập đến vấn đề đầu tiên.

Khung kiến trúc của chúng tôi lựa chọn Lua làm ngôn ngữ phát triển chính. Khác với nhận thức thông thường của các kỹ sư C++ (phần lớn engine client hiện nay đều dùng C++), chúng tôi không xem Lua chỉ là ngôn ngữ kịch bản nhúng đơn thuần, mà hướng tới thiết kế toàn bộ hệ thống engine như một ngôn ngữ lập trình tổng quát bằng Lua.

Đồng Bộ Khóa Bước Trong Thiết Kế Game Mạng

Sáng nay, tôi muốn chia sẻ một chủ đề thú vị liên quan đến hệ thống đồng bộ game mạng dựa trên cơ chế lockstep. Chủ đề này được khơi gợi từ một cuộc trò chuyện tuần trước với nhóm phát triển MOBA đang gặp vấn đề với độ chính xác timer của khung skynet. Họ phàn nàn rằng timer của skynet chỉ đạt độ phân giải 10ms (100Hz), không đủ đáp ứng yêu cầu “đồng bộ khung hình” cho dự án của họ. Nhóm này cho rằng họ cần server đẩy dữ liệu về client theo chu kỳ cố định 66ms (tương đương 15Hz), nhưng skynet chỉ có thể trigger event ở các mốc 60ms hoặc 70ms, điều này ảnh hưởng đến “cảm giác chơi game”.

Kho Tài Nguyên Và Nâng Cấp Hệ Thống Phát Hành

Vào cuối năm ngoái, tôi đã thiết kế kiến trúc kho tài nguyên cho engine 3D của chúng tôi.
Sau đó giao cho một thành viên trong nhóm phát triển triển khai, hệ thống này đã được sử dụng trong nửa năm qua. Gần đây, qua việc nghiệm thu nội bộ phiên bản nhỏ của engine, tôi nhận thấy vẫn còn nhiều điểm cần cải tiến. Hiện tại, hệ thống quản lý tập tin tài nguyên bị trộn lẫn với chức năng cập nhật tài nguyên trực tuyến trong giai đoạn phát triển, trong khi phần mạng vẫn tồn tại một số lỗi nhỏ, thỉnh thoảng gây treo chương trình. Việc định vị các lỗi này tốn nhiều công sức, tôi quyết định tái thiết kế lại mô-đun này, kết hợp luôn các ý tưởng cải tiến mới.

Quá Trình Khởi Động Tự Thân Của Hệ Thống Tập Tin Ảo

Trong thiết kế động cơ game của chúng tôi, một hệ thống tập tin ảo (Virtual File System - VFS) đã được xây dựng với khả năng tích hợp nhiều loại hệ thống tập tin thực thể khác nhau như mô-đun hệ thống tập tin địa phương, mô-đun RAM, hay thậm chí là mô-đun truy cập qua mạng. Mô hình này cũng áp dụng cho kho tài nguyên (resource repository) mà chúng tôi thảo luận trước đó - một dạng mô-đun hệ thống tập tin đặc biệt.

Biên Dịch Thời Gian Thực Các Phép Toán Và Vài Mẹo Vặt Tinh Vi Trong Lua

Thư viện vector mà tôi thiết kế cho dự án 3D engine đã vận hành được một thời gian. Trong quá trình sử dụng, tôi liên tục tối ưu hóa và cải tiến. Từ đầu, tôi xác định rõ yêu cầu cốt lõi là giảm thiểu chi phí tương tác giữa Lua và C, đồng thời tăng tính kết dính của hệ thống. Về mặt dễ sử dụng, tôi dự kiến sẽ xây dựng lớp bao bọc phía trên.

0%