【问题标题】:Multiplayer HTML5 semi-real-time game, node.js/socket.io多人 HTML5 半实时游戏,node.js/socket.io
【发布时间】:2013-05-22 07:58:28
【问题描述】:

我想使用 node.js 和 socket.io 创建一个多人 HTML5 半实时游戏。帧速率为 3 fps。玩家使用箭头键移动。所有游戏对象都沿直线移动(玩家水平或垂直移动)。玩家按 Page Up/Down 加速/减速。这是我的第一个 HTML5 动画游戏,也是我的第一个重型 JavaScript 项目。

我学习了一个名为“使用 WebSockets 和 Node.js 创建实时多人游戏”的教程(点击 here)。本教程使用箭头键移动为每个玩家显示一个黑色方块。不幸的是,它只适用于一台计算机(但有多个浏览器选项卡)。您必须将浏览器指向 public/index.html 文件。我想修改它,这样我就可以通过将我的浏览器指向 192.168.1.4:8000 从局域网上的另一台计算机加入游戏。最终,我希望我的兄弟通过访问 myquadrawebsite.com 来加入。我知道如何为 apache 做端口转发,但不知道 node.js。以下是本教程中的 3 个精简的高级代码:

// public/index.html
        <script src="http://localhost:8000/socket.io/socket.io.js"></script>
        <script src="js/game.js"></script>
        <script> // Initialise the game
            init();
            animate();
        </script>
// game.js
    var io = require("socket.io");
    var socket, players;
    function init() {
        players = [];
        socket = io.listen(8000);
        setEventHandlers();
    };
    var setEventHandlers = function() {
        socket.sockets.on("connection", onSocketConnection);
    };
    function onSocketConnection(client) {
        util.log("New player has connected: "+client.id);
        client.on("new player", onNewPlayer);
    };
// public/js/game.js
    var remotePlayers, localPlayer, socket;
    function init() {
        localPlayer = new Player(startX, startY);
        socket = io.connect("http://localhost", {port: 8000, transports: ["websocket"]});
        remotePlayers = [];
        setEventHandlers();
    };
    var setEventHandlers = function() {
        socket.on("connect", onSocketConnected);
        socket.on("new player", onNewPlayer);
    };

我已经到处搜索了有关 node.js 和 socket.io 的其他教程,但到目前为止没有一个对我有帮助。 (我的长期目标是创建一个 HTML5 游戏开发框架。)如果有人能指出我正确的方向,我将不胜感激。谢谢。

【问题讨论】:

  • 我可以建议研究 Unity 游戏引擎吗?重新发明已经创造的东西通常是一个容易的错误。

标签: node.js websocket socket.io multiplayer


【解决方案1】:

不幸的是,它只适用于一台计算机(但有多个浏览器选项卡)

这强烈表明您在一台计算机上运行服务器,而其他计算机客户端(网络浏览器)无法访问该服务器。

您应该确保您在客户端中使用的代码使用的 URL 可供任何人(任何客户端)尝试访问游戏时访问,例如

socket = io.connect("http://localhost", {port: 8000, transports: ["websocket"]});

绝对不会为运行服务器的计算机上的人以外的任何人工作。

如果您将 URL 更新为 192.168.1.4:8000 并且其他人可以访问该地址,那么它更有可能起作用。

【讨论】:

  • 感谢您指出客户端使用的 URL 不应该是 localhost。我将其更改为“192.168.1.4:8000”,但无法通过局域网从其他计算机连接。然后我启动了 apache,我可以通过访问 192.168.1.4 从另一台计算机连接到我以前的项目。您的回答似乎表明我走在正确的轨道上。如果您或其他人能对这个问题有更多了解,我将不胜感激。
  • 我找到了更好的教程:来自 Build New Games 的 Real Time Multiplayer in HTML5。希望我能在这个更复杂的教程中获得更好的运气。谢谢。
【解决方案2】:

您不必将浏览器指向公众,地址(取决于您将其路由到的位置(如果您使用 express,它将只是 /index.html))http://127.0.0.1:8000(相当于 localhost)@ 987654322@

我的第一个 socket.io 游戏已经完成了一半,我绝对建议使用 nodejitsu 之类的服务来部署甚至测试你的游戏

【讨论】:

    猜你喜欢
    • 2011-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-09
    • 2012-10-10
    • 1970-01-01
    • 2012-07-11
    • 2013-05-22
    相关资源
    最近更新 更多