我尝试使用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 = '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(){
})
});
当我运行两个客户端时,第一个客户端可以移动第二个客户端Rect,第二个客户端可以移动第一个客户端rect,第三个客户端可以移动第一个和第二个客户端rect。
我有疑问如何创建真正的多层播放器?像这样:打开三个客户端,第一个客户端获取rect1,第二个rect2和最后一个rect3。第一个客户端只能移动rect1,第三个客户端只能移动rect3。
也许有人有主意吗?我在Google中搜索,但找不到答案。
对不起,我的英语。
首先,查看http://www.google.com/events/io/2011/sessions/super-browser-2-turbo-hd-
remix-introduction-to-html5-game-
development.html
它说明了如何使用requestAnimationFrame等。
其次,游戏状态应存在于服务器上并在客户端上进行镜像。
当玩家单击鼠标时,客户端应该只发送一条消息。然后,服务器应向所有客户端(包括执行该操作的客户端)发送一条消息。
每个播放器应作为对象存在于服务器上。玩家登录时,应该向他们介绍服务器上已经存在的每个玩家的状态。
修改的客户端代码:http :
//codr.cc/s/d0154536/js
修改后的服务器代码:http :
//codr.cc/s/f96ce1d2/js
本文向大家介绍Node.js 制作实时多人游戏框架,包括了Node.js 制作实时多人游戏框架的使用技巧和注意事项,需要的朋友参考一下 在 Node.js 如火如荼发展的今天,我们已经可以用它来做各种各样的事情。前段时间UP主参加了极客松活动,在这次活动中我们意在做出一款让“低头族”能够更多交流的游戏,核心功能便是 Lan Party 概念的实时多人互动。极客松比赛只有短得可怜的36个小时,要求一
主要内容:exec() 方法,support.js 文件代码:,master.js 文件代码:,spawn() 方法,support.js 文件代码:,master.js 文件代码:,fork 方法,support.js 文件代码:,master.js 文件代码:我们都知道 Node.js 是以单线程的模式运行的,但它使用的是事件驱动来处理并发,这样有助于我们在多核 cpu 的系统上创建多个子进程,从而提高性能。 每个子进程总是带有三个流对象:child.stdin, child.stdout
我们都知道 Node.js 是以单线程的模式运行的,但它使用的是事件驱动来处理并发,这样有助于我们在多核 cpu 的系统上创建多个子进程,从而提高性能。 每个子进程总是带有三个流对象:child.stdin, child.stdout 和child.stderr。他们可能会共享父进程的 stdio 流,或者也可以是独立的被导流的流对象。 Node 提供了 child_process 模块来创建子进
本文向大家介绍JavaScript+html5 canvas绘制的小人效果,包括了JavaScript+html5 canvas绘制的小人效果的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JavaScript+html5 canvas绘制的小人效果。分享给大家供大家参考,具体如下: 运行效果截图如下: index.html代码如下: canvas.js代码如下: 更多关于js特效相关内容
问题内容: 我希望让Socket.io 在Node.js v.0.6.0及更高版本中与本机负载平衡(“集群”)一起工作。 据我了解,Socket.io使用Redis存储其内部数据。我的理解是:不是要为每个工作人员生成一个新的Redis实例,而是要强制这些工作人员使用与主服务器相同的Redis实例。因此,连接数据将在所有工作人员之间共享。 像这样的主人: 我们必须以某种方式传递给工人并执行以下操作:
问题内容: 没有任何扩展库,同一个canvas元素中可以有多个图层吗? 因此,如果我在顶层上执行clearRect,它将不会擦除底层? 谢谢。 问题答案: 不,但是,您可以将多个元素彼此叠加并完成类似的操作。 在画布上绘制第一层,在画布上绘制第二层。然后,当您在顶层时,下部画布上的所有内容都会显示出来。