Lý lịch
Tôi đã làm việc để tạo ra một công cụ trò chơi đa luồng trong thời gian rảnh rỗi và tôi hiện đang cố gắng quyết định cách tốt nhất để làm việc một sytem thực thể vào những gì tôi đã tạo. Cho đến nay, tôi đã sử dụng bài viết này của Intel cho điểm khởi đầu cho động cơ của mình. Cho đến nay tôi đã thực hiện vòng lặp trò chơi thông thường bằng cách sử dụng các tác vụ và bây giờ tôi đang chuyển sang sử dụng một số hệ thống và / hoặc hệ thống thực thể được kết hợp. Tôi đã sử dụng một cái gì đó tương tự như Artemis trong quá khứ, nhưng sự song hành đang ném tôi đi.
Bài viết từ Intel dường như ủng hộ việc có nhiều bản sao dữ liệu thực thể và có những thay đổi được thực hiện cho từng thực thể được phân phối nội bộ vào cuối bản cập nhật hoàn chỉnh. Điều này có nghĩa là kết xuất sẽ luôn ở phía sau một khung, nhưng đó có vẻ như là một sự thỏa hiệp chấp nhận được với các lợi ích hiệu suất cần đạt được. Tuy nhiên, khi nói đến một hệ thống thực thể như Artemis, việc mỗi thực thể được sao chép cho mỗi hệ thống có nghĩa là mỗi thành phần cũng sẽ cần được sao chép. Điều này là có thể làm được nhưng với tôi có vẻ như nó sẽ sử dụng rất nhiều bộ nhớ. Các phần của tài liệu Intel loại bỏ chủ yếu là 2.2 và 3.2.2. Tôi đã thực hiện một số tìm kiếm để xem liệu tôi có thể tìm thấy bất kỳ tài liệu tham khảo tốt nào để tích hợp các kiến trúc tôi sẽ không, nhưng tôi chưa thể tìm thấy bất cứ điều gì hữu ích.
Lưu ý: Tôi đang sử dụng C ++ 11 cho dự án này, nhưng tôi tưởng tượng hầu hết những gì tôi đang hỏi nên là ngôn ngữ bất khả tri.
Giải pháp có thể
Có một EntityManager toàn cầu được sử dụng để tạo và quản lý Entity và EntityAttribution. Chỉ cho phép truy cập đọc vào chúng trong giai đoạn cập nhật và lưu trữ tất cả các thay đổi trong hàng đợi trên mỗi luồng. Khi tất cả các nhiệm vụ được hoàn thành, các hàng đợi được kết hợp và các thay đổi trong từng nhiệm vụ được áp dụng. Điều này có thể có vấn đề với nhiều lần ghi vào cùng một trường nhưng tôi chắc chắn có thể có một hệ thống ưu tiên hoặc dấu thời gian để sắp xếp nó. Đây có vẻ là một cách tiếp cận tốt với tôi vì các hệ thống có thể được thông báo về các thay đổi đối với các thực thể khá tự nhiên trong giai đoạn phân phối thay đổi.
Câu hỏi
Tôi đang tìm kiếm một số thông tin phản hồi về giải pháp của tôi để xem liệu nó có ý nghĩa hay không. Tôi sẽ không nói dối và tự nhận là một chuyên gia về đa luồng và tôi đang làm điều này phần lớn để thực hành. Tôi có thể thấy trước một số mớ hỗn độn phức tạp nảy sinh từ giải pháp của mình, nơi nhiều hệ thống đang đọc / ghi nhiều giá trị. Hàng đợi thay đổi mà tôi đã đề cập cũng có thể khó định dạng theo cách mà mọi thay đổi có thể có thể dễ dàng được truyền đạt khi tôi không làm việc với POD.
Bất kỳ thông tin phản hồi / lời khuyên sẽ được nhiều đánh giá cao! Cảm ơn!
Liên kết
- http://software.intel.com/en-us/articles/designing-the-framework-of-a-abul-game-engine
- http://gamadu.com/artemis/
- http://www.gamedev.net/topic/560083-rendering-in-a-task-basing-multithreaded-en môi / (không được đề cập trong bài đăng này nhưng giải pháp tương tự được đề cập)