转载请说明出处:http://blog.csdn.net/lsmfeixiang/article/details/42213929
github地址:https://github.com/teffy/cocos2dx
这是一篇我个人在EOE发的blog《《Cocos2d学习之路》一,前序和闹钟》,由于eoe的blog系统实在是无言以对,我就把eoe上面的帖子以及blog是都转到csdn上来,原文地址:http://www.eoeandroid.com/blog-781265-51452.html
本人做Android三年时间了,一直以来都有想学一下怎么做游戏的想法,最近终于是抽出时间,也每天坚持着在学习。
开始也不知道有什么游戏引擎,去年就了解过Andengine,现在叫OrangeEngine,也知道cocos2d,unity3d(还有其他引擎,但是我不怎么知道),前段时间真正开始学习的时候,还是选择了cocos2d。原因如下:
一,我对比了这三个引擎的开发语言,
OGE是基于java的,当然这个是最熟悉的了,cocos2d基于c++,c,lua,js,ios-oc,unity3d基于C#(这个我真的没去了解过,只是听我同事说的,他之前搞过),而且我最近在学习c++,看C++的视频;
三是在前俩原因的基础上,自然舍弃了unity3d(当然以后还是想去学习一下),然后还是比较熟悉java就去试着看了下oge,照着官方资料学习了一下,很是蛋疼,而且官方资料和新版本api不太一致,当然是有源码,但是我没那精力去研究一遍源码;同时也在cocos2d,环境配置也是把我折磨的死去活来的,也是因为我太想用官方的那个组合套装,最后还是用各种散件,然后配置搞定环境的,然后按照官方的教程写了第一个Demo。
总结一下:
1、我的环境是:win7/8(公司电脑win7,家里电脑win8),64位,cocos2d 3.3final,vs2013,eclipse4.2+adt+cdt+sdk+ndkr9d(这一套就可以直接在Eclipse里面run as了,不用先去\proj.android下面执行python build_native.py然后再导入Eclipse)
2、先花了三四天的时间看cocos2d官方的文档(
http://cn.cocos2d-x.org/article/
),从头看到尾,同时也把环境折腾起来,运行一个最经典的程序----Hello World
3、看教程了解CocosStudio的基本使用,
http://cn.cocos2d-x.org/tutorial/show?id=1649
跟着教程写Code,同时总结了遇到的问题:
struct tm *tm;
time_t timep;
time(&timep);
tm = localtime(&timep);
hour = tm->tm_hour;
minute = tm->tm_min;
second = tm->tm_sec;
2)、schedule_selector(ClockBackgroundScene::updateTime),updateTime的定义,参数不能为空,要定义为ClockBackgroundScene::updateTime(float t)
3)、CCLog要换成log
ndk一定得是r9d版本
项目工程不要放在带有空格的路径
我是使用先vs写code,在pc上验证,然后Eclipse导入验证下就ok了,其他平台暂时没设备和条件,就不验证了吧
使用Eclipse直接Run as的时候可能会报C++文件undefined reference to `XX'异常,可以参考http://blog.csdn.net/gf771115/article/details/34414449这里,解决,然后可以把:\Cocos\cocos2d-x-3.3\templates\cpp-template-default\proj.android\jni下的Android.mk按照
这个来修改配置,以后再新建项目就不用管了,当然也可以使用python编译,然后再导入运行
最后放一张手机上运行的截图,电脑上的就不截了,还得编译老一会时间
今天到这里了,后面再有进度了,会慢慢的更新上,一点一点记录下我的学习之路。也请高手大牛来指导提携一下,谢谢
重新看code,发现CREATE_FUNC这个宏没看明白啥意思,百度了下,看明白,搜索结果如下:
/** * define a create function for a specific type,such as CCLayer * @__TYPE__ class type to add create(),such as CCLayer */ #define CREATE_FUNC(__TYPE__) static __TYPE__* create() { __TYPE__ *pRet = new __TYPE__(); if (pRet && pRet->init()) { pRet->autorelease(); return pRet; } else { delete pRet; pRet = NULL; return NULL; } }注释中写的很明确,为一个类似CCLayer类的特定的类增加一个create函数.我们也可以看到在宏的下面定义了一个create()函数返回的类型就是宏带入的参数__TYPE__指针类型.那create函数里做了什么呢?它执行了类的构造函数,执行了init()初始化函数,最后又设置创建出的对象为自动释放内存.这样其他人在使用这个类的时候,只要是用create()函数创建出来的对象就不用费心去管理释放内存了. 所以我们的code里面定义了一个virtual init函数 另外 USING_NS_CC查看定义#define USING_NS_CC using namespace cocos2d,加上cocos2d的命名空间