我尝试使用HTML5 Canvas,JavaScript(太使用John Resig简单继承库)和带有Socket.IO的Node.js创建简单的多人游戏。我的客户代码:
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 ='正确';
socket.connect();
socket.on('connect',function(){socket.send();
    console.log('Connected!');
    玩家=新玩家(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();
    }其他{
    }
});
socket.on('disconnect',function(){
    console.log('Disconnected!');
});
var Player = Class.extend({
    初始化:函数(x,y){
        this.x = x;
        this.y = y;
    },
    setX:function(x){
        this.x = x;
    },
    getX:function(){
        返回this.x;
    },
    setY:函数(y){
        this.y = y;
    },
    getY:function(){
        返回this.y;
    },
    画: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(){
        这.y--;
    },
    moveLEFT:function(){
        this.x--;
    },
    moveDOWN:function(){
        this.y ++;
    },
    moveRIGHT:function(){
        this.x ++;
    }
});
函数checkKeyCode(event){
    var keyCode;
    if(event == null){
        keyCode = window.event.keyCode;
    }其他{
        keyCode = event.keyCode;
    }
    开关(keyCode){
        案例38://向上
            player.moveUP();
            socket.send(UP);
        打破;
        案例37://向左
            player.moveLEFT();
            socket.send(LEFT);
        打破;
        案例40:// DOWN
            player.moveDOWN();
            socket.send(DOWN);
        打破;
        案例39://正确
            player.moveRIGHT();
            socket.send(RIGHT);
        打破;
        默认:
        打破;
    }
}
函数update(){
    player.draw();
}
var FPS = 30;
setInterval(function(){
    update();
    player.draw();
},1000 / FPS);
函数init(){
    document.onkeydown = checkKeyCode;
}
在里面();
和服务器代码:
var http = require('http'),
    io = require('socket.io'),
    buffer = new Array(),
服务器= http.createServer(function(req,res){
    res.writeHead(200,{'Content-Type':'text / html'});
    重发('你好,世界
');
});
server.listen(8080);
var socket = io.listen(server);
socket.on('connection',function(client){
    client.on('message',function(message){
        console.log(消息);
        client.broadcast(消息);
    })
    client.on('disconnect',function(){
    })
});
当我运行两个客户端时,第一个客户端可以移动第二个客户端Rect,第二个客户端可以移动第一个客户端rect,第三个客户端可以移动第一个和第二个客户端rect。
我有疑问如何创建真正的多层播放器?像这样:打开三个客户端,第一个客户端获取rect1,第二个rect2和最后一个rect3。第一个客户端只能移动rect1,第三个客户端只能移动rect3。
也许有人有主意?我在Google中搜索,但找不到答案。
抱歉,我的英语不好,谢谢。