2010-08-08 19 views
6

Tôi đang làm việc trên một trò chơi có logic AI, chuyển động, vv và vẽ. Liệu nó có ý nghĩa để tính toán chuyển động và logic AI bằng cách sử dụng Web Worker? Nhưng làm thế nào để tôi làm điều đó - bởi vì các công nhân cần phải biết rất nhiều về chủ đề chính như vị trí của các vật thể nhất định đối với va chạm, số lượng đạn, v.v. Nó cảm thấy như không thể bởi vì công nhân hoàn toàn tách biệt khỏi sợi chính với không có quyền truy cập những gì như vậy. Tôi biết rằng có một hệ thống postMessage(), nhưng điều đó cảm thấy như vậy ... umm, đau đớn?Sử dụng Web Worker cho trò chơi có ý nghĩa không?

Ví dụ, tôi có một đối tượng súng trường đại diện cho một tay súng trường với một sprite, vị trí, sức khỏe, vv Tôi muốn anh ta tuần tra. Vì vậy, làm thế nào để làm điều đó tuần tra mã trên một công nhân? Nó sẽ cần khá nhiều sự truy cập toàn bộ đối tượng đó.

+1

Tôi không chắc chắn về ngữ cảnh: Nếu câu hỏi rất cụ thể đối với trò chơi, bạn nên hỏi http://gamedev.stackexchange.com –

Trả lời

3

Tôi nghĩ sẽ rất hợp lý khi sử dụng WebWorkers cho trò chơi, nhưng có nghĩa là bạn sẽ phải giữ đối tượng trạng thái trò chơi có thể được chuyển thành JSON hợp lệ mà bạn có thể chuyển sang webworkers. Trên brightside, bạn cũng có thể đặt rất nhiều dữ liệu nội tại bên trong những người làm web đó.

var gameState = { 
    sprites: { 
     { 
     type: 'rifleman', // damage, accuracy, speed etc set inside appropriate webworker. 
     owner: 'playerA', 
     x: 100, 
     y: 100, 
     z: 0, 
     level: 1, // used to fetch modifiers to dmg, acc, speed etc. 

     }, 
     { 
     // each sprite it's own state obj. 
     } 
    } 
} 

sau đó bạn thiết lập một WebWorker để tuần tra và có thể sự kiện (bạn có thể gọi webworkers khác bên trong một WebWorker cũng và các sự kiện quá trình tuần tra)

var patrolWorker = new WebWorker('patrolWorker'); 
patrolWorker.onmessage = function(e){ 
    render(e.data); // your render function, can ALSO be a webworker if you like ;) 
} 
patrolWorker.postMessage(gameState.sprites); 

Nó phải trở nên rõ ràng bây giờ, rằng việc sử dụng WebWorkers thực sự là một quyết định kiến ​​trúc rất nhiều, nếu bạn muốn sử dụng chúng, nó sẽ liên quan đến rất nhiều việc tái cấu trúc. Nếu không có refactoring, tôi nghi ngờ nó hữu ích cho bạn cả.

+0

Đối với trò chơi nếu có nhiều đối tượng, trò chơi nêu rõ rằng được lưu trữ dưới dạng mảng các số có thể được ưu tiên vì bạn tránh dữ liệu -> JSON -> chuỗi chuyển đổi dữ liệu. –

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