2012-12-08 5 views
0

사용자가 캔버스에 배치 된 객체를 수집해야하는 멀티 플레이어 게임을 만들고 있습니다. 나는 그 객체들을 각 사용자마다 같은 위치에 두어야한다. 나는 스프라이트를 그릴 좌표를 만들 수있는 socket.io 서버와 클라이언트 측을 사용하고 있습니다 :Socket.io node.js 모든 사용자가 같은 위치에 스프라이트를 배치하도록 Math.random

클라이언트 :

var ShoppingList = function(noItems){ 
    var self = this; 
    self.list = []; 

    for(var i = 0; i < noItems; i++){ 
    socket.emit('getPosition', {id: i, gameWidth: Game.width}); 

    socket.on('setPosition', function(data){ 
     self.list.push(new ShoppingListItem(data.id, data.x, data.y));; 
     //this.list.push(new ShoppingListItem(i)); 
    }); 

서버 : 그러나

socket.on('getPosition', function(data) { 
    socket.emit('setPosition', { 
     x: 32 + (Math.random() * (data.gameWidth - 64)), 
     y: 32 + (Math.random() * (data.gameWidth - 64)), 
     id: data.id 
    }); 
}); 

의에서 ShoppingList 접근 socket.on 함수 내에서 첫 번째 코드 블록이 null 오류를 발생시킵니다. 어쨌든 함수 밖에서 배열에 추가 할 수 있습니까?

답변

1

쇼핑 목록 기능에서 socket.on('setPosition', ...)을 가져와야합니다. 이 작업을하는 방식은 실제로는 setPosition 이벤트가 수신되는 동안 만 듣기 때문에 이해가되지 않습니다. 즉, emit 이벤트가 발생하면 지연이 발생하기 때문에 서버가 setPosition을 트리거하기 전에 함수가 종료됩니다. 대신 다음과 같이 시도하십시오.

var ShoppingList = function(noItems){ 
    var self = this; 
    self.list = []; 

    for(var i = 0; i < noItems; i++){ 
     socket.emit('getPosition', {id: i, gameWidth: Game.width}); 
    } 
}; 

socket.on('setPosition', function(data){ 
    ShoppingList.list.push(new ShoppingListItem(data.id, data.x, data.y)); 
}); 
관련 문제