Próbuję utworzyć prosty Multi-player z HTML5 Canvas, JavaScript (także przy użyciu prostej biblioteki dziedziczenia Johna Resiga) i Node.js z Socket.IO. Kod mojego klienta:
var canvas = document.getElementById („gra”);
var context = canvas.getContext ('2d');
var socket = new io.Socket ('127.0.0.1', {port: 8080});
var player = null;
var UP = „UP”,
LEWO = „LEWO”,
DOWN = „DOWN”,
PRAWO = „PRAWO”;
socket.connect ();
socket.on ('connect', function () {socket.send ();
console.log („Połączono!”);
player = nowy gracz (50, 50);
});
socket.on („wiadomość”, funkcja (msg) {
if (msg == „UP”) {
player.moveUP ();
} else if (msg == 'LEFT') {
player.moveLEFT ();
} else if (msg == 'DOWN') {
player.moveDOWN ();
} else if (msg == 'RIGHT') {
player.moveRIGHT ();
} else {
}
});
socket.on („odłącz”, funkcja () {
console.log („Disconnected!”);
});
var Player = Class.extend ({
init: funkcja (x, y) {
this.x = x;
this.y = y;
},
setX: funkcja (x) {
this.x = x;
},
getX: function () {
zwróć to. x;
},
setY: funkcja (y) {
this.y = y;
},
getY: function () {
zwróć to. y;
},
draw: function () {
context.clearRect (0, 0, 350, 150);
context.fillRect (this.x, this.y, 15, 15);
},
move: function () {
this.x + = 1;
this.y + = 1;
},
moveUP: function () {
this.y--;
},
moveLEFT: function () {
this.x--;
},
moveDOWN: function () {
this.y ++;
},
moveRIGHT: function () {
this.x ++;
}
});
funkcja checkKeyCode (zdarzenie) {
var keyCode;
if (event == null) {
keyCode = window.event.keyCode;
} else {
keyCode = event.keyCode;
}
switch (keyCode) {
przypadek 38: // UP
player.moveUP ();
socket.send (UP);
przerwa;
przypadek 37: // LEWY
player.moveLEFT ();
socket.send (LEFT);
przerwa;
przypadek 40: // W DÓŁ
player.moveDOWN ();
socket.send (DOWN);
przerwa;
sprawa 39: // PRAWO
player.moveRIGHT ();
socket.send (PRAWY);
przerwa;
domyślna:
przerwa;
}
}
aktualizacja funkcji () {
player.draw ();
}
var FPS = 30;
setInterval (function () {
aktualizacja();
player.draw ();
}, 1000 / FPS);
funkcja init () {
document.onkeydown = checkKeyCode;
}
w tym();
I kod serwera:
var http = wymagany („http”),
io = wymagany („socket.io”),
buffer = new Array (),
server = http.createServer (funkcja (req, res) {
res.writeHead (200, {'Content-Type': 'text / html'});
wysłać ponownie('Witaj świecie
”);
});
server.listen (8080);
var socket = io.listen (serwer);
socket.on („połączenie”, funkcja (klient) {
client.on („wiadomość”, funkcja (wiadomość) {
console.log (komunikat);
client.broadcast (wiadomość);
})
client.on („odłącz”, function () {
})
});
A kiedy uruchamiam dwa klienty, ja z pierwszym klientem mogę przenieść drugiego klienta Rect, a drugim klientem przenieść pierwszego klienta rect, a coś takiego jak z trzecim klientem może przenieść pierwszy i drugi klient rect.
Mam pytanie, jak stworzyć prawdziwy Multi-Player? coś w stylu: Otwórz trzy klienty, a pierwszy klient dostanie rect1, drugi rect2 i ostatni rect3. Pierwszy klient może przenieść tylko rect3, trzeci klient może przenieść tylko rect3.
Może ktoś ma pomysł? Przeszukuję w Google, ale nie znajduję odpowiedzi.
Przepraszam za mój język angielski, dziękuję.