我嘗試用HTML5 Canvas,JavaScript(也使用John Resig簡單繼承庫)和Node.js與Socket.IO創建簡單多人遊戲。 我的客戶端代碼:多人遊戲HTML5,Node.js,Socket.IO
var canvas = document.getElementById('game');
var context = canvas.getContext('2d');
var socket = new io.Socket('127.0.0.1', {port: 8080});
var player = null;
var UP = 'UP',
LEFT = 'LEFT',
DOWN = 'DOWN',
RIGHT = 'RIGHT';
socket.connect();
socket.on('connect', function() {socket.send();
console.log('Connected!');
player = new Player(50, 50);
});
socket.on('message', function(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('disconnect', function() {
console.log('Disconnected!');
});
var Player = Class.extend({
init : function(x, y) {
this.x = x;
this.y = y;
},
setX : function(x){
this.x = x;
},
getX : function(){
return this.x;
},
setY : function(y){
this.y = y;
},
getY : function(){
return this.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++;
}
});
function checkKeyCode(event) {
var keyCode;
if(event == null) {
keyCode = window.event.keyCode;
} else {
keyCode = event.keyCode;
}
switch(keyCode) {
case 38: // UP
player.moveUP();
socket.send(UP);
break;
case 37: // LEFT
player.moveLEFT();
socket.send(LEFT);
break;
case 40: //DOWN
player.moveDOWN();
socket.send(DOWN);
break;
case 39: // RIGHT
player.moveRIGHT();
socket.send(RIGHT);
break;
default:
break;
}
}
function update() {
player.draw();
}
var FPS = 30;
setInterval(function() {
update();
player.draw();
}, 1000/FPS);
function init() {
document.onkeydown = checkKeyCode;
}
init();
和服務器代碼:
var http = require('http'),
io = require('socket.io'),
buffer = new Array(),
server = http.createServer(function(req, res){
res.writeHead(200, {'Content-Type': 'text/html'});
res.end('<h1>Hello world</h1>');
});
server.listen(8080);
var socket = io.listen(server);
socket.on('connection', function(client){
client.on('message', function(message){
console.log(message);
client.broadcast(message);
})
client.on('disconnect', function(){
})
});
當我運行兩個客戶端與第一個客戶,我可以移動第二個客戶端矩形,並與第二客戶端移動第一客戶端正確,而且喜歡的東西第三個客戶可以移動第一個和第二個客戶矩形。
我有問題如何創建真正的多人?如: 打開三個客戶端和第一個客戶端獲得rect1,第二個rect2和最後一個rect3。第一個客戶端只能移動rect1,第三個客戶端只能移動rect3。
也許任何人有想法?我在谷歌搜索,但沒有找到答案。
對不起,我的英文。
超級瀏覽器2 turbo高清再混合介紹HTML5遊戲開發真棒! 感謝您的回答!我嘗試了你的模式化的客戶端/服務器代碼,但對我來說不行。 但謝謝你幫我理解多人遊戲! – rhavd 2011-06-07 14:42:07
我沒有測試我的修改後的代碼,所以可能存在一些錯誤,但是您明白了這個問題^ _^ – generalhenry 2011-06-07 15:35:32
所有鏈接目前都已經不在此答案中。 – 2015-03-25 03:31:51