【问题标题】:Send client other players score? Socket.io发送客户端其他玩家得分?套接字.io
【发布时间】:2016-07-04 01:25:38
【问题描述】:

我有一种情况,我不知道如何将竞争对手的当前分数发送给其他客户。

例如:

当玩家 1 点击时,我希望它在客户端告诉玩家 2 玩家 1 的分数。

    userOne = userIDs[0];
    userTwo = userIDs[1];

    socket.on("player one", function(data) {
        console.log(data.pScore + "THIS IS WORKING");
        score = data.pScore;
        console.log("THIS IS PLAYER TWO" + data.pNameTwo);
        if (isInArray(data.pNameTwo,allUsers)) {
            console.log(users[socket.id].username);
        }
        socket.emit("player ones score", {p1Score: score});
    });

    socket.on("player two", function(data) {
        console.log(data.pScore + "THIS IS WORKING");
        score = data.pScore;
        socket.emit("player twos score", {p2Score: score});
    }); 

我打算通过仅向特定用户 ID 发送分数来发送分数。但我不确定最好的方法。

【问题讨论】:

  • 制作一个两个用户都可以看到的游戏对象,并链接了其他玩家。
  • 如何做到这一点?

标签: javascript jquery socket.io


【解决方案1】:

最好的方法是拥有一个包含所有连接的对象,每次用户连接/断开连接时都会更新该对象。我看到你已经有一个他们的 ID 的 userIDs 列表,所以,如果你的对象被称为 userConnections,你的代码应该是......

userOne = userIDs[0];
userTwo = userIDs[1];

socket.on("player one", function(data) {
    console.log(data.pScore + "THIS IS WORKING");
    score = data.pScore;
    console.log("THIS IS PLAYER TWO" + data.pNameTwo);
    if (isInArray(data.pNameTwo,allUsers)) {
        console.log(users[socket.id].username);
    }
    userConnections[userTwo].emit("player ones score", {p1Score: score});
});

socket.on("player two", function(data) {
    console.log(data.pScore + "THIS IS WORKING");
    score = data.pScore;
    userConnections[userOne].emit("player twos score", {p2Score: score});
}); 

更新

好的,我将展示如何初始化和管理 userConnections。它是这样的(我只是猜测你代码中的一些变量是如何被调用的,所以我可能会弄错一些名字)。

var userConnections = {}

io.on('connection', function(socket) {
    userConnections[socket.id] = socket;

    //socket.on('player one', function(data) { ... } );
    //socket.on('player two', function(data) { ... } );

    socket.on('disconnect') {
        delete userConnections[socket.id];
    }
}

【讨论】:

  • userConnections 调用什么?
  • 因为我尝试了你所拥有的但说无法读取未定义的属性发射
  • 当我可以运行一个全局的 emit io.sockets.emit 并在那里获取值时,我很傻。但是感谢您启发我,因为这使我走上了正确的道路。
  • @factor_za 哦,我明白了。我很高兴你找到了做到这一点的方法。我是一个慢吞吞的人——我已经扩展了我的答案。无论如何,我不确定我的回答有什么帮助(因为它不是很接近),但不客气。
  • 哈哈,这让我思考并寻找解决方案。这是我的第一个 socket.io 项目。所以目前它非常丑陋!再次感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-09
  • 1970-01-01
  • 2021-09-14
  • 2022-09-28
  • 2019-06-01
  • 1970-01-01
相关资源
最近更新 更多