转载请注明出处:http://www.cnblogs.com/zisou/p/xianfan01.html

做一款游戏就先得制作好策划文档,和基本的人物世界构架的设计,然后架空在这样一个虚拟的世界中每一个环节都需要考虑到。

这些设计节点,都是环环相扣,相互影响依赖的关系;那么我想让我认识的同学,朋友一起相约到游戏世界中,并且能看到他和

他做交互呢?仙凡游戏的定义就是一款弱联网的游戏(HTTP为主要连接方式),那么弱联网怎么做这样一个交互非常强得功能呢?

看似不可能,不过作为手游,一切可以从简接近去模仿那种效果;

仙凡奇缘这款游戏的角色系统主要有这样一些功能:

人物基本信息

1,角色名称,性别,级别,称谓,账户ID,血,蓝,攻击,防御,攻速,经验值,移动速度;

2,技能ID(4个3个基本,一个必杀技),乘骑状态,坐骑ID,法宝ID,防具ID,首饰ID,背包格子数;

3,人物坐标,所在地图ID,所在地图坐标,场景名称等;

有很多没有列举出来,多达几十个字段的人物信息表,人物属性现在非常清晰了,每个字段都有它的功能;

详细说一下我自己对服务器端设计的架构:

1,服务器提供.aspx的post请求页面;由于C#有强大的托管机制,可以请求过程中运用反射+工厂

给服务器减轻了多人请求复杂数据,查询SQL速度快带来的优越;

2,socket辅助,提供心跳连接,和发送部分即使消息;

客户端通过http登陆后,会建立一个强连接socket连接我们的sockeserver服务器端,只是保持心跳,服务器,会一直

发送客户端心跳信息;实际上这块功能只是出发一些即时消息使用,如果玩家断线,失去连接,照样可以玩游戏,因为

主要通信还是http处理的主要业务;

看一个登陆模块的服务器代码,我在mac上用的是MonoDevelop开发环境,来开发服务器:

客户端创建角色:

ok,这就是基本创建角色部分;在之后进入游戏之后玩家就需要登陆了,登陆进入游戏前已经拿到了人物信息;

接下来就是进入场景之后,需要同步一次玩家(只同步一次即可),不需要玩家每一次的操作都去同步,那样

HTTP根本做不到,那么我们就把这个模拟出来,客户端同步其他玩家时,拿到其他玩家,在服务器上最后一次

切场景的坐标,然后进行本地客户端的AI操作,进行简单的移动即可;

部分代码如下:

void Maps_XianFanTing::UpdataPlayerList(float time)
{
CCPoint randomrange = ccp(,);
CCPoint randomrange2 = ccp(,);
vector<MainRoledata> rolelist = GlobalInfo::getInstance()->get_playerlist();
for (int i = ROLE_PLAYERLIST; i <ROLE_PLAYERLIST+rolelist.size(); i++)
{
int add_x = (int)(CCRANDOM_MINUS1_1()*randomrange.x);
int add_y =(int)(CCRANDOM_MINUS1_1()*randomrange.y);
float acttodo = CCRANDOM_MINUS1_1();
CCPoint npc_nowp =randomrange2;
CCPoint role_move_pc = ccp(npc_nowp.x+add_x,npc_nowp.y+add_y);//此处需要通过地图的视角把人物移动的坐标转化一下。
if(this->getChildByTag(i)!=NULL)
{
if(acttodo>)
{
this->getChildByTag(i)->setZOrder();
SpiritsPlayer::movemethod_Sp((CCSprite*)this->getChildByTag(i),,role_move_pc,rolelist.at(i-ROLE_PLAYERLIST));
}
else
{
this->getChildByTag(i)->setZOrder();
}
}
}
} void Maps_XianFanTing::MapUserListState(float time)
{
//加载其他玩家列表
if(GlobalInfo::getInstance()->getInstance()->get_mapuserlistflag()==true)
{
CCPoint randomrange = ccp(,);
CCPoint randomrange2 = ccp(,);
if(GlobalInfo::getInstance()->get_mapuserlistjsonlist().length()>)
{
vector<MainRoledata> rolelist = JsonPush::ToGetRoleListdata(GlobalInfo::getInstance()->get_mapuserlistjsonlist());
vector<MainRoledata> oldrolelist = GlobalInfo::getInstance()->get_playerlist(); if(oldrolelist.size()>)
{
for (int i = ; i < oldrolelist.size(); i++)
{
if(this->getChildByTag(ROLE_PLAYERLIST+i)!=NULL)
{
this->removeChildByTag(ROLE_PLAYERLIST+i);
}
}
}
if(rolelist.size()>)
{
for (int i = ; i < rolelist.size(); i++)
{ SpiritsPlayer* roles = new SpiritsPlayer(rolelist.at(i),);
int add_x = (int)(CCRANDOM_MINUS1_1()*randomrange.x);
int add_y =(int)(CCRANDOM_MINUS1_1()*randomrange.y);
roles->npc->setPosition(ccp(randomrange2.x+add_x,randomrange2.y+add_y));
this->addChild(roles->npc,,ROLE_PLAYERLIST+i);
}
}
GlobalInfo::getInstance()->set_playerlist(rolelist);
}
GlobalInfo::getInstance()->set_mapuserlistflag(false);
}
}

效果:玩家可以做简单的移动,模仿出了玩家都在线的感觉就行;

换线的思路是在服务器中建立一个地图的分线表,里面的字段只有人物ID和地图ID和所在线ID,如果达到同屏,那就

在换线的时候,切换自己的线的ID,然后同步一次其他玩家数据(同步和自己所在一个线ID)的玩家,客户端做相应

的刷新,同步操作!

刚才我们看到1线人是非常多的,而且服务器根本不可能给我们提供所有玩家同屏信息,那么我约好一个朋友去2线;

就可以同屏看到我的小伙伴了,效果如下图:

上图可以清晰看到,我成功换到了2线,并且服务器给我同步了一次玩家操作,我来到2线后就可以看到想找的小伙伴!

这一篇大概介绍了一下制作这个游戏角色系统功能的详细方法和思路,其实这样看上去弱联网的游戏也能有非常好的

效果,下一篇我会说一下,弱联网情况下聊天制作,聊天同步的操作;

ps:仙凡奇缘官网 http://www.xianfancoco.com

仙凡奇缘开发版1.0已上线:百度云盘下载体验

cocos2dxQQ交流群:41131516

 

【cocos2d-x 仙凡奇缘-网游研发(2) 角色换线系统】的更多相关文章

  1. 【cocos2d-x 仙凡奇缘-网游研发(1) 登录&注册】

    转载请注明出处:http://www.cnblogs.com/zisou/p/xianfan01.html 公司的项目总算告一段落了,年前憋到年后,总算要上线了,所以我也有了时间来搞我自己的游戏项目了 ...

  2. 【cocos2d-x 手游研发小技巧(6)聊天系统+字体高亮】

    转载请注明出处:http://www.cnblogs.com/zisou/p/cocos2dxJQ-6.html 聊天系统在手机网游中是最常见的交互工具,大家在一起边玩游戏边聊天岂不乐哉: 废话不多了 ...

  3. (转)火溶CEO王伟峰:Unity3D手机网游开发

    今天看到这篇文章,感觉很不错,尤其是那句“Unity3D的坑我觉得最严重的坑就是没有懂3D的程序员,把Unity当成Office用”. 转自http://blog.csdn.net/wwwang891 ...

  4. 【cocos2d-x 手游研发----研发思路及感想】

          我半年前进入了目前的这家做教育行业的公司(在此之前一直从事原生态开发手游的迷茫之路),学习是一件很快乐的事情,来到这家公司我有了很多时间去学习,不管是公司业务,还是其他技术相关的.于是开始 ...

  5. 【cocos2d-x 手游研发----地图活起来了】

    谈到地图不少人都说要做地图编辑器了,但是我暂时绕过这一步,如果不用寻路地图就不能移动?寻路就是会绕过障碍物的算法. 我做了一个简单的地图的思想,就是地图分层3层:背景层.可行区域层.遮罩层,但是地图就 ...

  6. 手机网游开发指南 - 需要多NB的技术

    Agent`K 似乎在三天打鱼N天晒网.只能呵呵了,懒散的家伙. 移动互联网越来越火,其中的网络游戏更是火,熊熊大火. 作为攻城师的你,作为小投资者的你,作为满脑子创意想要实现的你,肯定在四处打听:手 ...

  7. 网游中的网络编程系列1:UDP vs. TCP

    原文:UDP vs. TCP,作者是Glenn Fiedler,专注于游戏网络编程相关工作多年. 目录 网游中的网络编程系列1:UDP vs. TCP 网游中的网络编程2:发送和接收数据包 网游中的网 ...

  8. 【cocos2d-x 手游研发----目录】

    感谢大家一直支持我写这样一系列的博客,从中我自己也获益良多,cocos2d-x这样一款非常棒的引擎,是值得我们去学习和分享的,谈到分享,那我就把这套写了差不多一两个月的框架给大家开源下载,写的很一般, ...

  9. 网游中的网络编程3:在UDP上建立虚拟连接

    目录 网游中的网络编程系列1:UDP vs. TCP 网游中的网络编程2:发送和接收数据包 网游中的网络编程3:在UDP上建立虚拟连接 TODO 二.在UDP上建立虚拟连接 介绍 UDP是无连接的,一 ...

随机推荐

  1. win8.1下cocos2d-x 3.x环境搭建

    Win8.1下Cocos2d-x 3.4环境搭建 第一步: 需要下载的:(Windows 64位系统下环境搭建) Ant   apache-ant-1.9.4-bin.zip NDK   androi ...

  2. 安装运行Rovio

    https://github.com/ethz-asl/rovio下载代码,该存储库包含ROVIO(Robust Visual Inertial Odometry)框架. https://github ...

  3. mysql优化概述3

    1.前缀索引 建立索引关键字一种方案. 通常会使用字段的整体作为索引关键字. 有时,使用字段前部分数据,也可以去识别某些记录. 语法: index `索引名` (`字段`(N)); 使用字段前N个字符 ...

  4. Django之Form功能

    一 什么是Form?什么是DjangoForm? Django表单系统中,所有的表单类都作为django.forms.Form的子类创建,包括ModelForm 关于django的表单系统,主要分两种 ...

  5. 关于UI设计行业的认识再到认识

    相信很多同学和我一样提及到UI行业时,尤其是连门槛都没有踏入半步时,总会一脸茫然. 我也是一样的,我刚接触UI的前半个月,文章读过好多,作品也看过好多,什么"小白入门UI的十大建议啊&quo ...

  6. 为什么大神的UI设计那么高级?答案尽在此文…

    对于每个网页设计师而言,在设计过程中总会碰到需要作出设计决策的时候.也许你的公司并没有全职设计师,而需求上则要求设计出全新的UI:又或者你正在制作一个你自己的个人项目,而你希望它比 Bootstrap ...

  7. Oracle连接字符串大全

    // 在 C# 代码中用以下数据库提供程序访问 Oracle 数据库 // Oracle Data Provider for .NET / ODP.NET 使用 TNS 写法 Data Source= ...

  8. 用个体软件过程(PSP)记录你的工作

    用个体软件过程(PSP)记录你的工作 首先,非常感谢大家对本门课程的学习所投入的时间和精力. 其次,已经进入数据时代,口说无凭,拿数据来.如果你认为你已经投入了大量精力在这门课程的学习和作业中,而且已 ...

  9. win7-64bit下安装Scipy

    一直用MAC写python,但京东给的本装的是win7系统,在安装scipy时各种报错,最后错误提示为: no lapack/blas resources found 开始一顿搜,爆栈给出的解决方案是 ...

  10. json&pickle

    用于序列化的两个模块 json,用于字符串 和 python数据类型间进行转换pickle,用于python特有的类型 和 python的数据类型间进行转换Json模块提供了四个功能:dumps.du ...