Nhiều người chơi HTML5, Node.js, Socket.IO [đã đóng]


13

Tôi đang thử tạo Nhiều người chơi đơn giản với HTML5 Canvas, JavaScript (cũng sử dụng thư viện Kế thừa đơn giản John Resig) và Node.js với Socket.IO. Mã khách hàng của tôi:

var canvas = document.getEuityById ('trò chơi');
var bối cảnh = canvas.getContext ('2d');
var socket = new io.Socket ('127.0.0.1', {port: 8080});

người chơi var = null;

var LÊN = 'LÊN',
    TRÁI = 'TRÁI',
    XUỐNG = 'XUỐNG',
    QUYỀN = 'QUYỀN';

ổ cắm.connect ();

socket.on ('kết nối', function () {socket.send ();
    console.log ('Đã kết nối!');
    người chơi = Người chơi mới (50, 50);
});

socket.on ('message', function (messenger) {
    if (dir == 'UP') {
        người chơi.moveUP ();
    } if if (dir == 'LEFT') {
        người chơi.moveLEFT ();
    } if if (dir == 'DOWN') {
        người chơi.moveDOWN ();
    } if if (dir == 'RIGHT') {
        người chơi.moveRIGHT ();
    } khác {

    }
});

socket.on ('ngắt kết nối', function () {
    console.log ('Ngắt kết nối!');
});

var Player = Class.extend ({
    init: hàm (x, y) {
        này.x = x;
        this .y = y;
    },
    setX: hàm (x) {
        này.x = x;
    },
    getX: function () {
        trả lại cái này.x;
    },
    setY: hàm (y) {
        this .y = y;
    },
    getY: function () {
        trả lại cái này
    },
    vẽ: hàm () {
        bối cảnh.clearRect (0, 0, 350, 150);
        bối cảnh.fillRect (this.x, this.y, 15, 15);
    },
    di chuyển: hàm () {
        này.x + = 1;
        this .y + = 1;
    },
    moveUP: function () {
        Điều này y--;
    },
    moveLEFT: function () {
        này.x--;
    },
    moveDOWN: function () {
        this .y ++;
    },
    moveRIGHT: function () {
        này.x ++;
    }
});

chức năng checkKeyCode (sự kiện) {
    var keyCode;
    if (sự kiện == null) {
        keyCode = window.event.keyCode;
    } khác {
        keyCode = event.keyCode;
    }

    chuyển đổi (keyCode) {
        trường hợp 38: // LÊN
            người chơi.moveUP ();
            socket.send (LÊN);
        phá vỡ;
        trường hợp 37: // TRÁI
            người chơi.moveLEFT ();
            socket.send (TRÁI);
        phá vỡ;
        trường hợp 40: // XUỐNG
            người chơi.moveDOWN ();
            socket.send (XUỐNG);
        phá vỡ;
        trường hợp 39: // QUYỀN
            người chơi.moveRIGHT ();
            socket.send (QUYỀN);
        phá vỡ;
        mặc định:
        phá vỡ;

    }

}

cập nhật hàm () {
    player.draw ();
}

var FPS = 30;
setInterval (hàm () {
    cập nhật ();
    player.draw ();
}, 1000 / FPS);

hàm init () {
    document.onkeydown = checkKeyCode;
}

trong đó();

Và mã máy chủ:

var http = yêu cầu ('http'),
    io = Yêu cầu ('socket.io'),
    bộ đệm = mảng mới (),

máy chủ = http.createServer (chức năng (req, res) {
    res.writeHead (200, {'Kiểu nội dung': 'text / html'});
    gửi lại ('

Chào thế giới

'); }); máy chủ.listen (8080); var socket = io.listen (máy chủ); socket.on ('kết nối', chức năng (máy khách) { client.on ('tin nhắn', chức năng (tin nhắn) { console.log (tin nhắn); client.broadcast (tin nhắn); }) client.on ('ngắt kết nối', function () { }) });

Và khi tôi chạy hai máy khách I với máy khách thứ nhất có thể di chuyển máy khách thứ hai Rect và với máy khách thứ hai di chuyển máy khách thứ nhất và thứ gì đó giống như với máy khách thứ ba có thể di chuyển máy khách thứ nhất và thứ hai.

Tôi có câu hỏi làm thế nào để tạo nhiều người chơi thực sự? đại loại như: Mở ba máy khách và máy khách đầu tiên nhận được orth1, thứ hai orth2 và orth3 cuối cùng. Khách hàng đầu tiên chỉ có thể di chuyển orth1, khách hàng thứ ba chỉ có thể di chuyển orth3.

Có lẽ ai cũng có ý kiến? Tôi tìm kiếm trong Google nhưng không tìm thấy câu trả lời.

Xin lỗi vì tiếng Anh của tôi, Cảm ơn.

Câu trả lời:


15

Tôi đã tạo một khung cụ thể để tạo các trò chơi nhiều người chơi trong thời gian thực HTML5, dựa trên mô hình Máy khách / Máy chủ. Trong mô hình này, người chơi chỉ gửi đầu vào cho máy chủ (nhấn phím) - và trò chơi xảy ra trên máy chủ.

Máy chủ sẽ gửi các ảnh chụp nhanh theo thời gian cho tất cả các máy khách và các máy khách sẽ tự quay ngược thời gian 75 ms kể từ thời điểm hiện tại, bằng cách tìm thấy hai bản cập nhật thế giới đã biết của chúng rơi vào giữa.

Kho lưu trữ (chứa 3 bản demo)
https://github.com/encedayitwillmake/RealtimeMultiplayerNodeJs

Video giới thiệu Box2D đang hoạt động:
http://vimeo.com/24149718

Các slide từ JSConf 2011: http://www.sl slideshoware.net/MarioGonzalez15/realtime-html5-multiplayergameswithnodejs-7868336

Nó dựa trên các trang trắng công cụ Nguồn của Quakeworld và Valve:
http://fabiensanglard.net/quakeSource/index.php http://developer.valvesoftware.com/wiki/Source_Multiplayer_Networking


Xin chúc mừng cho Khung này!
MrYoshiji

vâng đó là cách tôi lên kế hoạch để trò chơi của tôi chạy, thật hợp lý khi chỉ gửi đầu vào!
Nikos
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.