关于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. 分享一些无特征PHP一句话

    分享些不需要动态函数.不用eval.不含敏感函数.免杀免拦截的一句话.(少部分一句话需要php5.4.8+.或sqlite/pdo/yaml/memcached扩展等) 原理:https://www. ...

  2. C#中将结构类型数据存储到二进制文件中方法

    以往在vb6,vc6中都有现成的方法将结构类型数据写入和读取到二进制文件中,但是在c#中却没有现成的方法来实现,因此我查阅了一些资料,借鉴了网上一些同学的做法,自己写了个类似的例子来读写结构类型数据到 ...

  3. GPRM/GNRMC定位信息的读取与解析

    帧头 UTC时间 状态 纬度 北纬/南纬 经度 东经/西经 速度 $GPRMC hhmmss.sss A/V ddmm.mmmm N/S dddmm.mmmm E/W 节 方位角 UTC日期 磁偏角 ...

  4. Qt txt文本中获取字符串的问题

    QT对txt文本进行读写一般是采用QFile和QTextStream结合使用,在此不细说,主要说一下读取txt文本的注意事项.因为txt文本中有中文也有英文还有数字,要准确获得需要的字串可就要多一个心 ...

  5. Linux内核同步方法

    1.原子操作,是其它同步方法的基础. 2.自旋锁,线程试图获取一个已经被别人持有的自旋锁,当前线程处于忙等待,占用cpu资源. 3.读写自旋锁,根据通用性和针对性的特点,普通自旋锁在特定场景下的表现会 ...

  6. 进入做Mvc项目的时候 返现某个文件夹下面css js png等静态文件都访问不了

    原来是我在该文件夹下面添加了一个web.config 里面 静止了所有的文件 直接访问 <system.web>    <httpHandlers>      <add ...

  7. <img> to image_tag

    <img src="clean_wave.jpg?" alt="Clean_wave"><%= image_tag("clean_w ...

  8. 气球或者泡泡向上飘动 jQuery插件

    圣诞.元旦要来了,公司以往基本每个月至少要搞一两款手机小游戏来宣传产品,这次也不例外!! 之前做过,按压柚子.许愿.吃柚子等等小游戏,这次是做个那种 气球向上飘动,戳破气球,随机获取奖品.如下图: 手 ...

  9. 【总结】编写自己的JDBC框架

    一.数据库连接池: 在一般用JDBC 进行连接数据库进行CRUD操作时,每一次都会: 通过:java.sql.Connection conn = DriverManager.getConnection ...

  10. 用Wireshark简单分析HTTP通信

    我们都学过TCP,HTTP的相关概念,本文借助协议分析工具Wireshark,让大家对一些概念眼见为实,权当温故而知新. 场景: 在Client(10.239.196.211)上通过web brows ...