2009-04-17 19 views
5

Vì vậy, tôi đang cố gắng tạo một công cụ trò chơi đa luồng đơn giản cho trò chơi tôi muốn viết. Cho đến nay, tất cả mọi thứ đã làm việc mà không có bất kỳ vấn đề, tôi thậm chí biết những bước tôi phải thực hiện để hoàn thành nó.Làm cách nào để giữ cho dữ liệu thế giới của tôi đồng bộ hóa trong một công cụ trò chơi đa luồng?

Chỉ có một điều tôi không biết (tốt, về mặt kỹ thuật, tôi biết một giải pháp cho nó, nhưng tôi hy vọng có một cái gì đó thanh lịch hơn và nhanh hơn): Về cơ bản, tôi có một chủ đề riêng biệt cho mỗi phần của động cơ của tôi - Đồ họa, Đầu vào, Vật lý, Âm thanh, v.v.

Chuỗi vật lý có cấu trúc nút cảnh hoàn chỉnh của thế giới, nơi nó mô phỏng mọi thứ. Tuy nhiên, bây giờ tôi phải có cấu trúc này qua sợi đồ họa của tôi, với chi phí thấp nhất có thể. Lý tưởng nhất, nó chỉ nên chuyển các phần đã thay đổi kể từ lần cập nhật cuối cùng.

Tôi có các thành phần để chuyển dữ liệu này, chỉ có vấn đề là tạo ra nó.

Cho đến nay, tôi đã nghĩ đến hai cách tiếp cận khác nhau:

  • sao chép toàn bộ cấu trúc cho mỗi cập nhật - rất đơn giản, nhưng có thể thời gian và intensife bộ nhớ (Tôi không có kinh nghiệm với động cơ lớn - sẽ này có khả thi?)
  • theo dõi các phần nào của cảnh thay đổi bằng cách đánh dấu các nút cảnh với một số lá cờ, và sau đó chỉ việc sao chép qua phần thay đổi

Tiếp cận người ta sẽ sao chép một lượng lớn bộ nhớ, nhưng không có nhiều chế biến powe r, cách tiếp cận hai sẽ làm ngược lại: rất nhiều sức mạnh xử lý, ít bộ nhớ sao chép.

Có một số câu trả lời chung mà cách tiếp cận sẽ nhanh hơn trong môi trường chơi game thông thường không?

Trả lời

4

Không, không có câu trả lời chung được chấp nhận, đó là một lĩnh vực nghiên cứu hiện tại về phát triển trò chơi.

2 xu của tôi là sự khôn ngoan thông thường - mà bạn sử dụng thực sự phụ thuộc vào trường hợp sử dụng cụ thể của bạn - nếu trò chơi của bạn có nhiều dữ liệu (nghĩa là nó rất tốn nhiều bộ nhớ, như hầu hết các tiêu đề bom tấn), có thể bạn sẽ muốn chỉ truyền các thay đổi. Nếu trò chơi của bạn không phải là bộ nhớ chuyên sâu (ví dụ, trò chơi arcade), bạn có thể có thể lấy đi bằng cách sao chép toàn bộ đối tượng.

Tôi khuyên bạn nên triển khai cả hai và hooking lên bộ tính giờ hiệu suất để xem giờ nào hoạt động tốt hơn cho bạn; có thể thực hiện một kiến ​​trúc có thể xử lý cả hai phương thức một cách minh bạch.

+0

một số lý thuyết: Tốc độ truyền cao nhất của DDR2-1066 RAM là 8533 MB/s và tôi muốn có ít nhất 100 bản cập nhật mỗi giây, do đó, một bản cập nhật phải nhỏ hơn 85 MB. Một nút vật lý sẽ phải có ít nhất 32 byte (28 cho vị trí và định hướng ít nhất là 4 cho một ID duy nhất), nếu sử dụng 32 bit ints là ID. Với 10.000 đối tượng, điều này có nghĩa là 312,5 kB để sao chép cho mỗi bản cập nhật (0,3% tối đa) Tuy nhiên, điều này không bao gồm chi phí cho phân cấp nút. Có thể dễ dàng thực hiện được. – Mononofu

Các vấn đề liên quan