多人HTML5半实时游戏,node.js / socket.io

时间:2013-05-27 12:47:22

标签: node.js websocket socket.io multiplayer

我想使用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游戏开发框架。)如果有人能指出我正确的方向,我会很感激。感谢。

2 个答案:

答案 0 :(得分:0)

  

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

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

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

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

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

如果您将网址更新为192.168.1.4:8000,并且其他人可以访问该地址,则可能会更有效。

答案 1 :(得分:0)

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

我的第一个socket.io游戏已经过了一半,我肯定建议使用像nodejitsu这样的服务来部署甚至测试你的游戏