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?
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