论坛上关于网络游戏的帖子不多,一个月前尝试着用Cocos2d-x制作了一个网络对战的卡牌游戏,在此和大家分享一下制作经验。希望新手可以参考一下,高手能够指点一下。

制作网络游戏其实不难,至少我做的是这样,用到了四个比较重要的部分:
1、HttpRequest 等一系列类和方法 (头文件以及命名空间  #include "network/HttpClient.h"  using namespace cocos2d::network;)
2、用于解析Xml的几个类文件 (http://www.cocoachina.com/bbs/read.php?tid=330159&page=e&#a)
3、用Asp.net编写的WebService
4、数据库(前期用的Access,后来用的My SQL)

以我的卡牌游戏为例,当前到了我的出牌回合,我需要先摸张牌。实际上是我手机中的游戏客户端向服务器发送请求,获取当前的一张牌。

具体过程如下,首先通过HttpRequest发出一个url,也就是WebService的网址,其中包括要调用WebService的方法名与参数(如"http://localhost/WS_LL/Service.asmx/getCard?roomID=101");WebService根据参数执行方法,方法中写好对数据库的调用,获取/修改 数据库数据,将结果以XML格式返回给游戏;游戏收到WebService的反馈,将结果通过XML的一系列类去解译,得到我们要的信息,这里的话就是拿到的那张牌的ID号。

说下每个步骤稍微说一下我当初遇到的难题:
把“部分1”走通后,我确信此种方案可行。官网上有详细的教程[url]http://www.cocos.com/doc/article/index?type=cocos2d-x&url=/doc/cocos-docs-master/manual/framework/native/v3/httpclient/zh.md[/url] 
“部分2” 确定我可以提取从WebService获取的信息,头文件引用这两个就行了
 #include "tinyxml.h" 
 #include "tinystr.h"
但其他的cpp文件也是必要的。
不知道正确的使用方法是怎样的,我的方法看起来就挺山寨的,大家就仅供参考吧,下面是回调函数中的代码

void HttpManage::getCardCompleted(HttpClient *sender, HttpResponse *response)
{std::vector<char> *buffer = response->getResponseData();bool b = response->isSucceed();if (!b){getCard();return;}std::string a = "";for (unsigned int i = 0; i < buffer->size(); i++){a += (*buffer)[i];}const char *p = a.c_str();TiXmlDocument *spXmlDoc = new TiXmlDocument();spXmlDoc->Parse(p);TiXmlNode* pNode = NULL;TiXmlElement *spElement = NULL;const char * szXmlVaule = NULL;ConstClass::MYCARD2_TYPE = std::atoi(spXmlDoc->FirstChild("int")->ToElement()->GetText());HttpData::getCardHandler();
}

由于这个WebService得方法返回值是个整形,所以直接FristChild("int")就可以了,如果返回值是个自定义的类,那么前面都一样,提取的地方改成这样:

    ConstClass::P_ID_FROM = std::atoi(spXmlDoc->FirstChild("Result")->FirstChildElement("pIDfrom")->ToElement()->GetText());ConstClass::P_ID_TO = std::atoi(spXmlDoc->FirstChild("Result")->FirstChildElement("pIDto")->ToElement()->GetText());ConstClass::TYPE_FROM1 = std::atoi(spXmlDoc->FirstChild("Result")->FirstChildElement("typeFrom1")->ToElement()->GetText());ConstClass::TYPE_FROM2 = std::atoi(spXmlDoc->FirstChild("Result")->FirstChildElement("typeFrom2")->ToElement()->GetText());ConstClass::GESS_TYPE = std::atoi(spXmlDoc->FirstChild("Result")->FirstChildElement("typeGess")->ToElement()->GetText());ConstClass::TYPE_TO = std::atoi(spXmlDoc->FirstChild("Result")->FirstChildElement("typeTo")->ToElement()->GetText());

WebService 是我工作当中经常要用到的,但我平时用的都是Soap的方式调用,这里需要用Get 或 Post的方式。只要在webconfig里加上这句话就好了,

<webServices><protocols><add name="HttpSoap" /><add name="HttpPost" /><add name="HttpGet" /></protocols>
</webServices>

【Cocos2d-x 游戏开发】HttpClient制作网络游戏相关推荐

  1. 《Cocos2d 跨平台游戏开发指南(第2版)》一1.9 添加动作到精灵

    本节书摘来异步社区<Cocos2d 跨平台游戏开发指南(第2版)>一书中的第1章,第1.9节,作者: [印度]Siddharth Shekar(谢卡)译者: 武传海 责编: 胡俊英,更多章 ...

  2. iOS cocos2d 2游戏开发实战(第3版)---你的第一个游戏!

    2019独角兽企业重金招聘Python工程师标准>>> 随着苹果公司不断地创新与发展,新的iPhone 5.iPad 4以及iPad mini产品相继问世,包括iOS与Xcode在内 ...

  3. 【通知】▁▂▃ Himi 最新著作《iOS游戏编程之从零开始—Cocos2d-x与cocos2d引擎游戏开发》★书籍源码+第4/5/6样章★-免费下载★ ▃▂▁

    2013年新年,Himi的第二本著作:<iOS游戏编程之从零开始-Cocos2d-x与cocos2d引擎游戏开发>一书正式发售: (大家可以到新华书店.淘宝.拍拍.当当.亚马逊等进行购买) ...

  4. iOS cocos2d 2游戏开发实战(第3版)

    <iOS cocos2d 2游戏开发实战(第3版)> 基本信息 原书名:Learn cocos2d 2: Game Development for iOS 作者: (美)Steffen I ...

  5. Cocos2D手机游戏开发之优化篇

    Cocos2D手机游戏开发之优化篇 在这个手机游戏盛行已久的年代,一款产品想要博得更多用户的喜爱就要在细节上做得更加到位.而游戏的优化在这里面起到了非常关键的作用.试想下,一款画面和玩法都深受用户喜欢 ...

  6. 添加类iOS cocos2d 2游戏开发实战(第3版)

    这两天一直在学习添加类之类的问题,现在正好有机会和大家讨论一下. 第1章 简介 1 1.1 第3版中的新增内容 2 1.2 选择ios版cocos2d的来由 3 1.2.1 收费 3 1.2.2 开源 ...

  7. 适用于独立游戏开发的Unity3D 网络游戏架构设计

    最近在GitChat上发布了一个网络游戏框架教程,目标是带领读者搭建一个商业游戏的网络架构设计,该架构设计是游戏的核心技术,将采用 Unity 2017.2 最新版本作为开发工具.内容分为 UI 架构 ...

  8. Cocos2d手机游戏开发-黄金矿工梦西游手机游戏

    开发环境: Cocos2d-X v2.2.x 下载地址: http://www.taomadao.com/thread-46-1-1.html 转载于:https://my.oschina.net/u ...

  9. cocos2d x游戏开发系列教程 中国象棋01 工程文件概述

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 上一篇博 ...

最新文章

  1. 权威预测:2018年这十大数字化转型趋势要火!
  2. Lion的发送E-mail的类
  3. SpringMVC学习总结(2)——SpringMVC返回json配置
  4. 发那科机器人寄存器Ar_发那科机器人与TP参数的千丝万缕关系
  5. 初识Mysql(part10)--我需要知道的5种聚集函数
  6. MFC添加自定义消息及重写消息过程
  7. Android如何关闭Application
  8. anglar ajax执行2次的原因,AngularJS与Ajax表单提交需要单击两次
  9. python赋予x新值_快速为 Python 字典设置新的值
  10. java bufferedwriter会自动创建文件吗_Java中为什么会有包装类?自动拆装箱必要吗?关于Wrapping Class这是重点!...
  11. 深入理解Java:SimpleDateFormat安全的时间格式化 ;
  12. matlab-罗曼诺夫斯基准则剔除粗大值
  13. POJ1209 UVA158 Calendar题解
  14. 漫谈Clustering:高斯混合模型(GMM)
  15. python层次聚类法画图_原理+代码|详解层次聚类及Python实现
  16. 佳能Canon imageCLASS MF236n 一体机驱动
  17. html div边框添加文字,css通过text-shadow给文字加边框!
  18. 2022-09-08 mysql/stonedb-慢SQL-出现问题的SQL-Q2
  19. linux、ubuntu如何查看网速
  20. 控制台报错: Another version of Vue Devtools seems to be installed. Please enable only one version at a ti

热门文章

  1. nginx文件服务器html美化,ngx-fancyindex,nginx文件浏览美化插件
  2. 腾达路由器电信宽带服务器无响应,分析腾达路由器无法分配IP地址
  3. java 日期类 周_Java中用Calendar类计算周和周的起始日期
  4. 视频播放(三)——视频播放
  5. linux:~$,/$,~#,/#的区别与含义
  6. 【愚公系列】2021年12月 网络工程-windows系统基本命令
  7. word编辑技巧:空格标记的处理方法
  8. (开源)ESP8266改装小风扇,手机app远程控制+天猫精灵控制
  9. 什么是网络安全?网络安全威胁存在哪些?
  10. flutter app 换马甲