转载请注明出处: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. Message: u'The given selector btn dropdown-toggle btn-info is either invalid or does not result in a WebElement

    html代码: <html> <head> <meta http-equiv="content-type" content="text/ht ...

  2. RedisUtil工具类

    转载:http://blog.csdn.net/liuxiao723846/article/details/50401406 1.使用了jedis客户端,对redis进行了封装,包括: 1)使用了re ...

  3. idea 注释文件和方法注释

    类注释: 如下图所示

  4. [SoapUI] 通过正则表达式从xml格式的response中提取ID

    import com.eviware.soapui.support.GroovyUtils import java.util.regex.* //Get response def groovyUtil ...

  5. asp.net请求编译流程图(其实就是说asp.netd代码是如何转成中间代码IL然后交给cpu执行的)

  6. C#集合类型大盘点(转载)

    原文地址:http://www.cnblogs.com/jesse2013/p/CollectionsInCSharp.html#b02

  7. hi~大家好,特地出来解释下最近为啥都不更新了!

    总结一句话就是!因为我有宝宝啦~加上项目赶得不要不要的公司原因加上个人原因只能在家养胎啦,对象也是程序猿哦~不过是后端程序猿哈哈哈. 我打算开公众号(百撕可乐)啦,和博客圆的名字一样,毕竟用了这么多年 ...

  8. KBMMW 4.70.00 发布

    We are happy to announce the release of kbmMW v. 4.70.00 Professional and Enterprise Edition. kbmMW ...

  9. 带你快速进入.net core的世界(转)

    出处:http://www.cnblogs.com/zhaopei/p/netcore.html 阅读目录 vmware虚拟机安装 CentOS7.3安装 Windows的客户端软件 .NET Cor ...

  10. WebService测试工具介绍及下载

    1 LoadRunner  LoadRunner,是一种预测系统行为和性能的负载测试工具.通过以模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问 题,LoadRunner能够对整个企业架构 ...