0

我正在创建一个多人游戏,用户必须收集放置在画布上的对象。我需要将这些对象放置在每个用户的相同位置。我正在使用 socket.io 服务器来创建坐标,并使用客户端来绘制精灵:

客户:

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
    });
});

但是,从 socket.on 函数中访问第一个代码块中的 ShoppingList 会引发 null 错误。无论如何要在函数之外添加到该数组中吗?

4

1 回答 1

1

您应该去掉socket.on('setPosition', ...)ShoppingList 函数。你这样做的方式并没有真正意义,因为它只会在 setPosition 事件在函数中时监听它。这意味着该函数将在服务器触发 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));
});
于 2012-12-25T20:53:00.650 回答