Многопользовательская игра HTML5 в режиме полуреального времени, node.js / socket.io

Я хотел бы создать многопользовательскую HTML5-игру в режиме полуреального времени, используя node.js и socket.io. Частота кадров составляет 3 кадра в секунду. Игроки используют клавиши со стрелками для перемещения. Все игровые объекты движутся по прямым линиям (игроки перемещаются по горизонтали или вертикали). Игроки нажимают Page Up / Down для ускорения / замедления. Это моя первая анимированная игра HTML5 и мой первый тяжелый проект на JavaScript.

Я прошел через руководство под названием «Создание многопользовательской игры в реальном времени с помощью WebSockets и Node.js» (щелкните здесь). В этом руководстве для каждого игрока отображается черный квадрат с перемещением клавиш со стрелками. К сожалению, он работает только на одном компьютере (но с несколькими вкладками браузера). Вы должны указать в своем браузере (ах) на файл 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.) Если кто-нибудь может указать мне правильное направление, я буду признателен. Спасибо.


person Quadra    schedule 27.05.2013    source источник
comment
Могу я предложить изучить движок Unity Game? Переосмысление того, что уже создано, часто может быть простой ошибкой.   -  person Charlie Brown    schedule 11.09.2013


Ответы (2)


К сожалению, он работает только на одном компьютере (но на нескольких вкладках браузера)

Это убедительно свидетельствует о том, что вы используете сервер на одном компьютере, и он недоступен для клиентов других компьютеров (веб-браузеров).

Вы должны убедиться, что код, который вы используете в клиенте, использует URL-адрес, доступный любому (любому клиенту), пытающемуся получить доступ к игре, например.

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

Определенно не будет работать ни для кого, кроме человека на компьютере, на котором запущен сервер.

Если вы обновите URL-адрес до 192.168.1.4:8000 и этот адрес будет доступен другим, то вероятность того, что он будет работать, будет гораздо выше.

person leggetter    schedule 27.05.2013
comment
Спасибо, что указали, что URL-адрес, используемый клиентом, не должен быть localhost. Я изменил его на 192.168.1.4:8000, но мне не удалось подключиться с другого компьютера через локальную сеть. Затем я запустил apache и смог подключиться к моему предыдущему проекту с другого компьютера, посетив 192.168.1.4. Ваш ответ, кажется, указывает на то, что я на правильном пути. Если вы или кто-то еще можете пролить свет на этот вопрос, я был бы признателен. - person Quadra; 27.05.2013
comment
Я нашел лучшее руководство: Многопользовательская игра в реальном времени в HTML5 от Build New Games. Надеюсь, мне больше повезет с этим более сложным руководством. Спасибо. - person Quadra; 27.05.2013

вам не нужно указывать свой браузер на общедоступный адрес (в зависимости от того, куда вы его направили (если вы используете express, это будет просто /index.html)) http://127.0.0.1:8000 (эквивалент localhost) http://127.0.0.1:8000/index.html

Я примерно на полпути к моей первой игре socket.io, и я определенно предлагаю использовать такую ​​службу, как nodejitsu, для развертывания или даже тестирования вашей игры.

person Jim Jones    schedule 18.09.2013