九天雁翎的博客
如果你想在软件业获得成功,就使用你知道的最强大的语言,用它解决你知道的最难的问题,并且等待竞争对手的经理做出自甘平庸的选择。 -- Paul Graham

疯狂猎鸟项目小结 -- 技术篇(主要是cocos2d-x相关)

上次写了篇关于自己浅薄的管理经验的博客,被一些筒子们批评了,这次还是写篇技术贴吧,这样就不会有人说了,因为......那些人看不懂。该文早就和肖寒泉说了要写,但是因为写完后感觉好话不多,技术不多,就一直没有发布,现在我们又要开新项目了,而且不使用cocos2d-x了,那就发布了吧。

先说游戏引擎,疯狂猎鸟用的游戏引擎是cocos2d-x。

在一年多前(大概有这么久吧)就搜遍互联网,去寻找一个能跨win32,iphone平台的开源引擎,以方便进行iphone游戏的开发,只有很少的几个选项,甚至尝试过irrlicht不成熟的opengl es版,最后也尝试了orx,其实都不算特别理想,那个时候cocos2d-x刚刚出来没有多久,第一个支持的手机种类是沃phone,而iphone版本的demo都跑不顺畅,所以没敢使用。那个那时真的是有心自己写一个,无奈能力有限,但是很认可cocos2d-x的方向。

一年以后,当我开始再次为团队选择游戏引擎的时候,又一次的看了一下cocos2d-x,在查看了一下已经与cocos2d无异的demo后,说实话,相当长信心啊,我觉得自己能用到的特性也不会超过cocos2d-x的demo多少,那这样说的话,cocos2d-x就能用了,即使还有bug或者有什么平台相关的问题,因为cocos2d-x是开源引擎,那也不用怕,这也算是开源引擎的一个竞争优势,那就是不用100%成熟就能让人有信心使用。

初步研究后,作为传统的C++开发者(请允许我这样称呼自己),会有些受不了在C++中模拟objc的那种内存管理方式和类的初始化方式。看了cocos2d-x官网上的《Cocos2dxSimpleGame & Tutorials for beginners》后,就能很直接的感受到,cocos2d-x就是为移植而生的,所以文中一再的强调从cocos2d(objc)到cocos2d-x(C++) 几乎句句对译的优势,其实这个优势在真正用C++做原生开发的时候,就比较悲剧,因为这样的使用方式,根本就不是C++ style,你会感觉到内存不是完全在自己的控制之下。再进一步的看到cocos2d-x用C++实现的CCObject,CCAutoreleasePool,用于模拟objc的内存管理方式时,我觉得很悲催,cocos2d-x的作者们太辛苦了....然而,这还不算什么, CCArray,CCSet等objc容器和CCImage出现的时候,我近乎老泪纵横了,这是准备用C++实现一个objc吗?还带cocoa的......这可是GNU组织都没有实现的目标啊......开源社区的强大,让我感叹不已。

技术上,我能讲的东西不多,因为2D方面的东西也的确没有太多好讲。内存管理上,对于初学者,特别是刚刚毕业,学了点C++,连C++本身的内存管理都还没有弄明白的人,看到cocos2d-x绝对是晕的。建议是了解一些objc+cocoa的东西,最好是用过cocos2d,那样你就会明白那么多看起来别扭的设计是怎么来的了。其中,假如真的团队是初学者,那么可以完全限定不用autorelease那一套(也就是SpriteWithXXX那种接口),完全要求使用new来完成对象的创建,同时只是使用Release接口来完成内存释放,其中的管理还是自己完全接手即可,需要注意一个问题在于讲cocos2d-x编译成动态库时(iphone上不存在此问题),这样的做法不满足内存在哪分配在哪释放的原则(内存空间不同的问题),会crash。使用类似autoreleasepool时,实际相当于把最后一次引用技术放到了内存池中,每个循环都会集中清理一次,不用当心完全不会释放。
delegate的模拟机制做的不是很好,因为C++天生就不是适合干这个事情的材料,再加上Object的引用计数等问题,比如Action的回调使用时,保持Action的回调对象存在,一直加一个引用计数啥的(不知道是不是这个意思),容易导致内存管理混乱,同时,delegate的使用很混乱,因为用的是一个单独的基类来管理所有的回调类型。C++11的function,bind假如能用在这里,感觉设计上会清楚无数倍。
抽象上,cocos2d本身是单平台引擎,所以底层的设计本来就没有太多的考虑跨平台的事情,cocos2d-x比较单纯的去模仿,所以在平台抽象上做的就不是很好,比如渲染引擎的切换(opengl,opengl es,directx之间)就没有,导致win32上长期是opengl es加模拟(依赖于厂商的),平台的抽象也不是很好。建议参考irrlicht的抽象方式,哪怕是orx也好。
上面讲了那么多不好的地方,都是我们实际使用的时候碰到的问题,但是总体来说,cocos2d-x还是目前你想开发跨平台2d游戏最好的选择,上面也许只能说是爱之深恨之切吧。
其他的技术方面,texture packer很好用,值得买,particle designer也是粒子编辑器不二的选择。

阅读全文....

新的转变

2012总归是来了,这句话因为某种原因,听起来很悲壮。而这个时候,似乎也是该总结下2011的时候了,虽然过去的一年,我写的博客是越来越少了。 过去的一年对于我个人来说,应该算是工作以来最具有历史意义的一年吧,人生的轨迹在这里算是有了一个转折,或者说,有了一个比较突兀的变化。在年初的时候,我做了一个不那么艰难的决定,离开了那个曾经做出艰难决定的公司,加入了一家不到十人的初创企业,而这,决定了我将经历对于我个人来说最不平凡的一年,事实上,的确不平凡。 以前的工作对于我来说太容易,太没有挑战了,我需要一些更有难度的工作,这话由我说来似乎太过于自负或者自大,但是,这个话是前领导在年初的时候想要让我做出一些改变,给我的一个评价。背后的故事就不多说了,现在想想这个话说的的确有道理,假如我能够在每天晚上学习到半夜2~3点,因为兴趣去研究一些与工作不甚有关系的技术问题,写一堆乱七八糟的技术文章,而第二天半晕着去工作,但是工作却还总是不错的,甚至能够常常受到上级的认可,那这个工作对于我来说,的确有些过于容易了。 说这些没有啥自我膨胀的意思,虽然知道在中国当前环境下说这个话有些危险~~~~其实,说这些只是用于感叹今年我个人角色的一些转变,以及逐渐不那么容易的工作历程。

阅读全文....

移动平台现在可用的C++ 11特性

移动平台特指iOS和Android,并且Android使用的是NDK,因为开发的时候是在Win32平台下,所以还需要考虑VS的支持。

当前(2011-12-21)最新的版本:

Win32: Visual Studio 2010

Android NDK: GCC 4.4.3

iOS: Apple LLVM compiler 3.0(Clang)


本文所描述的C++ 11特性仅在上述三个平台,所写的版本号中有效,请先确认这点。

apache的WIKI上有个较为详细的列表。可以看到,现在能用的特性其实不怎么多:

  1. auto
  2. decltype
  3. extern template
  4. long long
  5. New function declaration syntax for deduced return types
  6. Right Angle Brackets
  7. R-Value References
  8. static_assert
  9. Built-in Type Traits

如下图:

上面是整体的描述,具体的各个编译器对C++ 11的支持情况见下面的链接:

Win32:
Visual Studio 2010支持情况:C++0x Core Language Features In VC10: The Table
Lambdas, auto, and static_assert: C++0x Features in VC10, Part 1
Rvalue References: C++0x Features in VC10, Part 2
decltype: C++0x Features in VC10, Part 3
Visual Studio 2011支持情况:C++11 Features in Visual C++ 11
Android NDK: GCC 4.4.3

Status of Experimental C++0x Support in GCC 4.4

C++0x/C++11 Support in GCC

iOS:

Apple LLVM compiler 3.0(Clang):C++ and C++'11 Support in Clang

The LLVM Compiler Infrastructure

 

使用方式:

1.Build Options选择Apple LLVM compiler 3.0

2."Apple LLVM compiler 3.0 - Language"中"C++ Language Dialect"选择“C++0x" (

3.”C++ Standard Library"选择libc++(LLVM C++ standard library with C++ '0X support)" (默认为"Compiler Default")

其他有意思的东西:

"libc++" C++ Standard Library

在线试用LLVM编译器

最新修改的原文所在地址


原创文章作者保留版权 转载请注明原作者 并给出链接

九天雁翎(JTianLing) -- www.jtianling.com

阅读全文....

三个乔布斯相关的视频

三个乔布斯相关的视频,“谨献给我们这个时代的疯子,那个真的改变这个世界的人” — Steve Jobs。

乔布斯在斯坦福大学的演讲视频

I'm convinced that the only thing that kept me going was that I loved what I did.

我坚信让我一往无前的唯一力量就是我热爱我所做的一切

 

You've got to find what you love, and that is as true for work as it is for your lovers.

所以,一定得知道自己喜欢什么,选择爱人时如此,选择工作时同样如此

 

Your work is going to fill a large part of your life, and the only way to be truly satisfied is to do what you believe is great work, and the only way to do great work is to love what you do.

工作将是生活中的一大部分,让自己真正满意的唯一办法,是做自己认为有意义的工作。做有意义的工作的唯一办法,是热爱自己的工作

 

If you haven't found it yet, keep looking, and don't settle.

你们如果还没有发现自己喜欢什么,那就不断地去寻找,不要祈求安逸

 

乔布斯45秒谈改变世界

在你成长的过程中,肯定一直会有人告诉你:世界原本就是这样,你的人生使命就是在这固有的世界中很好地生存,建立一个美满的家庭,多存一点钱,并尽量寻找生活的乐趣。其实这是非常狭隘的人生观,生活的舞台是非常广阔的。实际上,你生命中很多事物的缔造者甚至还没有你聪明和智慧,当你懂得了这么一个简单的道理之后,你会发现其实你也可以改变生活、影响世界,你可以创造属于你自己的东西,你的生命也将从此与众不同。 -- 来自kr

苹果Think Different电视广告

1997 年苹果的广告,由 Steve Jobs 亲自配音的版本。

Here’s to the crazy ones. The misfits. The rebels. The troublemakers. The round pegs in the square holes. The ones who see things differently. They’re not fond of rules. And they have no respect for the status quo. You can quote them, disagree with them, glorify or vilify them. About the only thing you can’t do is ignore them. Because they change things. They push the human race forward. While some may see them as the crazy ones, we see genius. Because the people who are crazy enough to think they can change the world, are the ones who do.

这是送给那个「疯子」、那个「不称职」、那个「叛逆份子」、那个「麻烦制造者」,那个用不一样的角度看这个世界的人。  他不喜欢规矩,对现状没有任何尊敬。  你可以引述他、你可以反对他、把他视为大师或是把他视为小丑。但有一件事情你没办法做,那就是忽略他。因为他改变这个世界,他把人类向前推进。  或许有些人认为他是一个疯子,我们认为他是一个天才。因为那些疯狂到认为他可以改变这个世界的人,才是那些真正改变这个世界的人。

 

阅读全文....

总算差不多恢复了

博客的主题,插件基本恢复~~~因为这次有cPanel的帮助,效率高了很多,几个小时的时间,博客就恢复到丢失前的水平了,果然还是应该用这种强大的工具啊~~~用命令行折腾的其实也没有多么有趣,早就比不上以前自己用gcc和make的时代了,光是yum/apt-get install一下,也不见得有什么乐趣可言,还不如点鼠标........明天接着恢复一些内容~~~

写博客的孩纸真伤不起啊,把自己的业余时间全部都搭进去了......

阅读全文....

博客重建~~~

因为刚刚开始自己尝试建wp博客,买了VPS,并且用的月付费,结果因为上个月忘了付钱了,尽管我在发现博客停止的第二天就补上了钱,但是托管商已经直接把数据删了,所以完全无法恢复,这个太悲催了,最悲催的是,我前段时间在服务器面板上使用的备份功能被告知没有用,只能从服务器上的备份数据恢复,不能上传数据(我备份后下载回来的)恢复...........于是,重建博客吧.........

首先尝试用amazon ec2来搭建wordpress,上手还算比较容易,但是我发现amazon的RDS太贵了,折算到人民币要5K多一年,而且没有免费的一年试用,所以作罢。

然后不过这次不再使用VPS了,我发现我其实也不需要,以前想要VPS做一些服务器要做的事情,其实现在可以通过amazon ec2来完成了。让blog就是blog吧,这样买个虚拟空间也便宜,还能用cPanel....干什么都挺方便的,不要再自己折腾linux的配置了,呵呵,我发现我现在越来越懒于折腾了,难道是老了吗?曾经我认为人生在于折腾......

阅读全文....

把握趋势, 把握未来 -- 小评"只有偏执狂才能生存"

只有偏执狂才能生存(一下以”偏执”来替代)一书听起来就像是某个大牛的布道式自传, 要告诉你需要怎么偏执才能生存, 自己又是怎么通过偏执成功的, 其实, 真正讲的是与战略转折点到来时, 企业的应对之道. 就像书上封面上写的那样: “战略转折点来的时候, 如果你不想被摧毁, 就只能快速反应, 适应, 并且改变. “

阅读全文....