关于android和cocos2d

  凭着对大学时候写html+css的一点点的记忆,我还是认为android的布局xml文件还是参考了html+css,只是他更加臃肿!就想 android平台本身那样,当然这也无可厚非,因为他要兼容很多东西,试想有一天android只有几款机型的时候,也许在布局上也就不会这样设计了! (ps:想起来微博上一个博友抱怨,写了一个简单的管理客户端,布局文件居然达到了1w行,要知道有效代码才8k行!)

  在刚开始写android的时候,最担心的就是分辨率的问题了,可是后来却没有发生过这种情况。因为几乎在产生差异的地方我都是使用的相对布局,比如weight或者relativeLayout等等。用这些特性抹掉不同机型造成的差异!

  现在转过头来写cocos2d,简直不能理解为什么要这样设计!觉得还是相对布局的好!可是熟悉了cocos2d的缩放和描点才知道,cocos2d的这样设计的妙处!看似绝对其实是相对的!首先声明下,我没有使用cocos2d提供的布局工具,而是自己手写布局!基本上是从下向 上,再从左到右,这样一个控件挨着一个控件,他的坐标他的位置都很好控制!这似乎也是一种相对的模式!

  关于http和tcp协议!

  在写一个扑克类游戏的时候,客户端选择了跨平台的cocos2d!首先没有选择unity3d是因为不想再写C#去了(大学的时候有写过),也不想写js(实在无法忍受js的语法)!再者大学毕业头几年其实一直在写C++,这几年一直写java后端和php服务器,对C++都有些生疏了,还有一些底层的socket api,在写这个cocos2d的客户端的时候,又从新找回了之前熟悉的网络编程,而且是跨平台的,话说之前写服务器一般也只是用在linux上!cocos2d的客户端因为要跑在ios上,android上,还有跑在win32上(调试的时候),所以需要一个跨平台的网络库!当然如果怕麻烦的话,可以只用socket相关的,而不介入的select模型,不过我还是引入了!为了处理的方便,我把select函数放在了每一个layer的update中!而不是单独新建一个新的线程,这样避免了同步上的问题!

  我们知道http是基于tcp协议的!做了封装,所以原理很简单;可是简单的原理缺造成了逻辑设计上的困难!因为在tcp中可以服务器主动推送的消息,全部需要客户端来定时主动拉取!客户端定时的时间还不能太长(这样会造成卡顿),也不能太短(造成客户端的卡顿和带宽的损耗)!我们之前的设计是定时器的时间为0.7秒!哎,还奇葩的数字!可能很多同学会说,http也可以做长连接!可是大家有没有想过,如果手机连的是wifi还好,支持长连接;但是如果手机连的是移动网络,那么移动会有一个http的代理!即使你的客户端和服务器都支持http长连接,代理不支持,也是没有办法!

  还有就是,为了节省带宽和避免卡顿,在使用http连接的时候,常常很多消息封装在一次http交互中!体现在代码中就是混淆了逻辑,而使用tcp协议就能很好的避免这个问题,没有卡顿!打一个比方:一个玩家跟注!服务器处理的时候,首先要处理这个玩家状态的更新,再处理轮到下一个玩家! 如果是tcp协议,那么很简单,玩家状态更新一个消息,轮到下一个玩家一条消息;但是如果是http协议就不一样了!客户端主动拉取消息,如果间隔1秒拉取一次,那么两个操作就间隔了一秒,在客户端体验看来就是很差了!除非将这两个操作放在一起,消息也放在一起;但是这样就破坏了函数单一性的职责!

  希望对大家有帮助!

  

最近一段时间开发客户端app的感悟的更多相关文章

  1. WCF服务运行一段时间后客户端无法连接WCF服务的解决办法 (转)

    WCF服务运行一段时间后客户端无法连接WCF服务的解决办法 (转) Windows Communication Foundation (WCF)是Microsoft为构建面向服务的应用提供的分布式通信 ...

  2. 关于近段时间论坛型APP 的一段舍弃

    一直以为缓存务必要做的很好,好到什么程度呢,我曾这样想,用户在下滑数刷新的时候也要做到,先加载久缓存再加载新的,同时只改变旧的某些项.这样的想法真的很好!好到我花费了三天去设计数据库和服务器的 php ...

  3. 关于这段时间学习 EntityFramework的 一点感悟

    Ado.Net,用了N多年,Entity Framework也关注了很多年. 每当项目转型的时候,就花费大巴的时间,学习一番,潮流的东西. 这个Orm很多,这个EF很火,这么多年了,我还是不敢用,虽然 ...

  4. 闲暇时间开发的个人app

    最近一段时间公司不是很忙,晚上基本没怎么加班.所以自己利用晚上在家的时间开发了一个app(奇趣营),其实自从转android开发以来,就有想过要自己开发一个app.一方面可以提升自己的经验:另一方面可 ...

  5. 我想外包开发一个APP,需要多少钱,多少时间?

    在一个阳光明媚的下午,我正瘫坐在椅子上改bug.忽然有人给我发微信:“我想做个app,多长时间,多少钱?” 从我从业iOS开发到现在,这个问题被问过无数次,比那句:“你是程序员,那你会修电脑吗?”还要 ...

  6. # 【ARM-Linux开发】在Win7的电脑上直接运行安装Ubuntu14.04发生的问题 标签(空格分隔): 【Linux开发】 --- > 一段时间以来,一直是在Windows上安装虚拟机

    [ARM-Linux开发]在Win7的电脑上直接运行安装Ubuntu14.04发生的问题 标签(空格分隔): [Linux开发] 一段时间以来,一直是在Windows上安装虚拟机,然后安装Ubuntu ...

  7. 【Qt开发】Qt让线程休息一段时间

    Qt 为何没有提供 Sleep 论坛上不时见到有人问: Qt 为什么没有提供跨平台的 sleep 函数? 使用平台相关的 Sleep 或 nanosleep 以后,界面为什么没有反应? QThread ...

  8. 跨平台移动APP开发进阶(二)HTML5+、mui开发移动app教程

    前端开发APP,从HBuilder开始~ 序 通过 HTML5 开发移动App 时,会发现HTML5 很多能力不具备.为弥补HTML5 能力的不足,在W3C 中国的指导下成立了www.HTML5Plu ...

  9. web前端工程师在移动互联网时代里的地位问题 为啥C/S系统在PC端没有流行起来,却在移动互联网下流行了起来 为啥移动端的浏览器在很多应用里都是靠边站,人们更加倾向于先麻烦自己一下,下载安装个客户端APP

    web前端工程师在移动互联网时代里的地位问题 支付宝十周年推出了一个新产品:支付宝的十年账单,我也赶个时髦查看了一下我的支付宝十年账单,哎,感慨自己真是太屌丝了,不过这只是说明我使用淘宝少了,当我大规 ...

随机推荐

  1. BizTalk 2013R2 WCF-LOB Oracle Adapter安装配置/问题&解决方法

    BizTalk 2013R2 WCF-LOB Oracle Adapter安装配置/问题&解决方法 安装Oracle Adapter 安装Oracle客户端 BizTalk 2013R2 安装 ...

  2. mac电脑如何不生成.DS_STORE文件

    执行这个命令,然后重启 defaults write com.apple.desktopservices DSDontWriteNetworkStores true

  3. ImageEdit 加载图片

    从本地加载图片 <dxe:ImageEdit Name="iePortrait" Height="120" Width="100" S ...

  4. PreparedStatement ResultSet

    public int searchProblemDistinctCount() throws Exception { DBOperator dbo = getDBOperator(); try { P ...

  5. java 获取某个URL的文件扩展名的方法(非精确,精确的扩展名应该使用服务器返回的MIME-TYPE)

    public static String getFileExtension(URL extUrl) { //URL: "http://photosaaaaa.net/photos-ak-sn ...

  6. SqlServer数据库备份与还原

    http://v.youku.com/v_show/id_XMjA4NzcyNzUy.html http://v.youku.com/v_show/id_XMjA4Nzc0NDQw.html

  7. Codeforces Round #382 (Div. 2) D. Taxes 哥德巴赫猜想

    D. Taxes 题目链接 http://codeforces.com/contest/735/problem/D 题面 Mr. Funt now lives in a country with a ...

  8. 编程语言 IDE 对比

    IDE是集成开发环境的英文缩写,所谓集成开发环境,就是将你在开发过程中所需要的工具或功能集成到了一起,比如代码编写.分析.编译.调试等功能,从而最大化地提高开发者的工作效率. 每种编程语言都有一些特定 ...

  9. C#-DataTable分页代码

    /// <summary> /// DataTable分页并取出指定页码的数据 /// </summary> /// <param name="dtAll&qu ...

  10. C#删除字符串最后一个字符的几种方法

    字符串:string s = "1,2,3,4,5,"目标:删除最后一个 "," 方法:1.用的最多的是Substring,这个也是我一直用的s = s.Sub ...