使用socket.set 和 socket.get 在存取玩家信息

百牛信息技术bainiu.ltd整理发布于博客园

socket.get('playerinfo', function (err, player) {
if(player == null) {
console.log("[new player]",data.name);
var player = new Player(socket, data);
}
else
{
console.log("[wait player visit again]",data.name);
socket.emit('error', "you have registered");
return ;
}
socket.set('playerinfo', player, function () {
usersWS.push(player);
console.log("[wait player numer]",usersWS.length);
//这在里如果玩家状态和数量满足要求就可以开始游戏了
Physic.CreatePhysicWorld(p1, p2);
//通知client 启动 游戏
…………..
}); //set
}); //get
}) //socket.on

转发 和处理 玩家的输入

 socket.on('sync', function (data) {
socket.get('playerinfo', function (err, player) {
if(player != null) {
//var target = usersWS[i].socket;
var room = player.room;
for(var i=0;i<room.players.length;i++)
{
if(room.players[i].id ==player.id)
{
//console.log("this is msg from id:",room.players[i].id)
}
else
{
room.players[i].socket.emit('sync', data);
//console.log("send to id:",room.players[i].id)
}
//room.players[i].socket.emit('sync', data);
}
}//if
else
{
socket.emit('error',"no session");
}
}); //get
}); //socket.on

}); //Network.on

定义一个简单的玩家对象

function Player(socket, data)
{
var newplayer = {
socket: socket,
id: player_next_id++,
tankType: 0,
name: data.name,
isMain: data.isMain,
ip: socket.remoteAddress,
status: '未准备',

// isAI: false, room: null }; newplayer.proto = Player.prototype; return newplayer; }

定义一个游戏房间对象

function Room(title)
{
var newroom = {
id: room_next_id++,
is_in_game: false, // 判断改房间的游戏是否已经开始
players: [],
map: 0,
title: title,
game: null
};
room_list.push(newroom);
newroom.__proto__ = Room.prototype;
return newroom;

}

最后感言: 本人是新手,发篇文章互动一下实属不易。不周之处,还望高手轻点儿拍砖。

nodejs 打造 多人对战游戏服务器(初级入门)的更多相关文章

  1. 用NodeJS打造多人在线聊天室(NodeJS & SocketIO & Express & EJS & MongoDB & Gulp)

    项目背景 这个项目主要是为了玩玩NodeJS,项目的方向大概是做出类似QQ的在线聊天系统.想要在线体验可以点击在线演示. 项目使用PM2进行部署和管理,功能在不断的迭代开发中.如果你觉得这个项目比较有 ...

  2. 深入浅出node.js游戏服务器开发1——基础架构与框架介绍

    2013年04月19日 14:09:37 MJiao 阅读数:4614   深入浅出node.js游戏服务器开发1——基础架构与框架介绍   游戏服务器概述 没开发过游戏的人会觉得游戏服务器是很神秘的 ...

  3. nodejs开发游戏服务器遇到的性能问题

    问题描述: 使用nodejs开发了一个游戏服务器,为了尽可能提高服务器的性能,服务器采用多进程的架构,前面处理玩家socket连接的是多个nodejs进程,使用 child_process 模块,服务 ...

  4. 类似于QQ游戏百万人同时在线的服务器架构实现

    http://blog.csdn.net/sodme/article/details/213995 —————————————————————————————————————————————————— ...

  5. unity3d + photon + grpc + nodejs + postgis/postgresql 游戏服务器设计

    unity3d + photon + grpc + nodejs + postgis/postgresql 游戏服务器设计 最近做玩票性质的游戏项目,客户端技术是 unity3d 和 android. ...

  6. Pomelo分布式游戏服务器框架

    Pomelo介绍&入门 目录 前言&介绍 安装Pomelo 创建项目并启动 创建项目 项目结构说明 启动 测试连接 聊天服务器 新建gate和chat服务器 配置master.json ...

  7. FPS游戏服务器设计的问题 【转】

    一.追溯 去gameloft笔试,有一个题目是说: 叫你去设计一个FPS(第一人称射击游戏),你是要用TCP呢还是要用UDP,说明理由 . 二.学习 这是两篇网上找到的文章,写非常不错. 当时笔试的时 ...

  8. (转)FPS游戏服务器设计的问题

    FPS游戏服务器设计的问题出处:http://www.byteedu.com/thread-20-1-1.html一.追溯 去gameloft笔试,有一个题目是说: 叫你去设计一个FPS(第一人称射击 ...

  9. Centos环境下部署游戏服务器-常用命令

         图1     在Linux的世界,如果你不玩命令,那你见了同行都不好意思和人家打招呼.同时服务器正常状况下放在远端,一般都是开ssh登录服务器,相信远程桌面的人很少见吧.这篇文章说说Linu ...

随机推荐

  1. CodeChef - METEORAK Meteor

    Read problems statements in Mandarin Chineseand Russian. A meteor fell on Andrew's house. That's why ...

  2. 《Java虚拟机原理图解》1.5、 class文件中的方法表集合--method方法在class文件中是怎样组织的

    0. 前言 了解JVM虚拟机原理是每一个Java程序员修炼的必经之路.但是由于JVM虚拟机中有很多的东西讲述的比较宽泛,在当前接触到的关于JVM虚拟机原理的教程或者博客中,绝大部分都是充斥的文字性的描 ...

  3. JS实现根据密码长度 显示安全条

    原文:http://www.open-open.com/code/view/1431324883763 //根据密码长度显示安全条 <ul class="clear"> ...

  4. 【Mybatis】 Mybatis在xml文件中处理大于号小于号的方法【问题】

    处理大于小于号的方法: https://www.cnblogs.com/winner-0715/p/6132755.html 第一种方法:用转义字符把">"和"&l ...

  5. hdu 1689 Alien’s Necklace (bfs层次图剪枝)

    Alien's Necklace Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  6. Exactly-once Spark Streaming from Apache Kafka

    这篇文章我已经看过两遍了.收获颇多,抽个时间翻译下,先贴个原文链接吧.也给自己留个任务 http://blog.cloudera.com/blog/2015/03/exactly-once-spark ...

  7. weex 小结

    1. import  文件时,必须引入全称,不能省略 .vue import mEcharts from '../components/Echarts.vue' 2.weex 的 cli 中没有 配置 ...

  8. C#语法复习3

    第七章 类与继承 1.虽然派生类不能删除基类的的任何成员,但我们可以利用在派生类当中声明与基类成员名称相同的成员来屏蔽基类成员.这叫 覆盖. 一种是隐式屏蔽.一种是显式屏蔽.所谓 显式就是 加上一个n ...

  9. Java多线程面试题归纳

    1.多线程有哪几种实现方法?举个样例说明下线程的同步. (1)Java多线程有两种实现方式:继承Thread类和实现Runnable接口,Thread就是实现了Runnable接口. 两个最简单的线程 ...

  10. ruby简单的基础 2

    1.代码块 代码块是用大括号或者do...end括起来的一系列代码.{ #this is a block} do #this is a blockend [1,2,3,4,5].each {|i| p ...