2012-04-29 42 views
10

Tôi chỉ đang nghĩ về khả năng Erlang cho máy chủ trò chơi. (oh tôi không phải chuyên gia Erlang, chỉ xem xét giai đoạn) Điều này có nghĩa là sử dụng Diễn viên Người mẫu để mô phỏng trò chơi. Tất nhiên, thu hút lớn nhất là đồng thời phân phối trên nhiều nút.Mô hình diễn viên và phát hiện va chạm

Câu hỏi lớn hiện tại của tôi là làm cách nào để tôi thực hiện các tương tác đa tác nhân như phát hiện xung đột. (đây chỉ là một ví dụ)

Mặc dù phát hiện va chạm về cơ bản là bắt buộc trong bất kỳ trò chơi nào, nhưng trong bản chất của Mô hình diễn viên, nó trông không hiệu quả và thậm chí không có ý nghĩa, vì nó cần truy vấn trạng thái đồng bộ toàn cầu và cập nhật tất cả các diễn viên nhắm mục tiêu. Và nếu tôi sử dụng bất kỳ đồng bộ hóa nào, nó sẽ ghi đè tất cả các lợi ích của mô hình diễn viên của Erlang.

Tất nhiên các diễn viên nhắm mục tiêu theo thời gian có thể nhỏ hơn nếu tôi sử dụng phân vùng không gian chính xác, nhưng nó chỉ là tối ưu hóa chứ không phải là câu trả lời chính. Hoặc đây có phải là câu trả lời đúng cho câu hỏi này không? Giảm phạm vi đồng bộ hóa bằng cách giảm số lượng các tác nhân tương tác?

Trả lời

9

Chia nhỏ bản đồ thành các phần nhỏ hơn và để cho từng phần là quá trình riêng của nó (thậm chí bạn có thể chia nhỏ quá trình này thành từng ô là quá trình riêng của nó). Một người chơi đang cố gắng di chuyển sẽ gửi một tin nhắn tới tile/sub-map nói rằng nó sẽ đến đó, và tile sẽ trả lời nếu nó có ổn hay không. Điều này tránh va chạm vì chỉ có một tin nhắn được xử lý bởi ô/bản đồ con tại một thời điểm. Nhiều bản đồ con/gạch có thể xử lý đồng thời các thư, do đó, nó vẫn là một chương trình đồng thời.

+0

Giảm phạm vi giao diện tương tác là cách duy nhất để thực hiện. Cảm ơn. – Eonil

7

Tôi có trò chơi dựa trên không gian làm máy chủ ở Erlang. Bí quyết là mỗi vị trí/nút/etc cũng là một diễn viên. Nó chạy các vật lý liên tục và gửi thông tin cho mỗi diễn viên thực thể trò chơi một cách thường xuyên.

Toàn bộ điều trở nên sạch hơn nhiều khi bạn bắt đầu suy nghĩ trừu tượng hơn về một diễn viên/thực thể là gì. Ví dụ, va chạm có thể là các diễn viên chính thức. Điều này làm cho phía máy khách dễ dàng hơn nhiều - gắn các hiệu ứng đồ họa và âm thanh vào xung đột. Về phía máy chủ, nó cũng làm - ngăn chặn nhiều hiệu ứng va chạm giữa hai thực thể nhiều hơn một lần trong một thời gian nhất định.

+0

Vì vậy, tất cả các vật lý được thực hiện trong diễn viên duy nhất? Làm thế nào bạn làm cho vật lý được thực hiện? – Eonil

+2

Có. Tôi đang sử dụng Bullet để chạy vật lý. Các diễn viên thực thể theo dõi trạng thái trò chơi của riêng mình, bắn nhau, quyết định chuyển động, vv Họ gửi lệnh đến vị trí, chạy các mô phỏng. Các vị trí chạy liên tục và gửi ra "bạn đang ở đây" cho các thực thể định kỳ và "bạn va chạm với X". Các thực thể cũng gửi các truy vấn đến vị trí đó. – Nialscorva

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