cocos基础教程(3)cocos3.x版本目录结构介绍

时间:2022-01-25 08:06:54

简介

  • cocos2d-x-3.x版本进行了很多优化,比如:将TTF字体用Atlas缓存,节点重排序官方声称提升了10倍速度,查找、移除节点方面也提高了10%,拆分渲染层到独立的线程运行;
  • 另外,coco2d-x3.x版本还采用C++标准,大量使用std::vector, std::function,std::bind, std::thread、auto等C++11的新标准,对于笔者来说,最令人激动的莫过于支持C++11的Lambda表达式,去掉了Objective-c的代码风格,对于命名规范等都往C++方向靠拢;
  • 另外,所有的类都去掉CC前缀,有些可能会导致跟其他SDK的API冲突的地方,新加入了__双下划线前缀,比如:CCLabelTTF变成LabelTTF;CCArray变成__Array;
  • 增加了一套新的比较完整的GUI控件;笔者大概看了下,包括Button、Label、slider、checkbox、ImageView、Loading、PageView、ScrollView、ListeView、TextField等常用的UI控件,基本上所有的新GUI控件都继承自UIWidget基类,而UIWidget继承自Object,除了UILayer(继承自Layer)、UILayoutParameter(Object)、UIInputManager输入事件管理类等少数几个类除外,试用了一下, 似乎所有的新GUI控件需要添加到UILayer这个新的控件上而不能直接添加到原有的Node节点上 , UILayer才可以直接添加到Cocos2d-x的原有的Node节点上,见如下代码,好不好用暂时不发表意见:
auto pLayer = UILayer::create();  
this->addChild(pLayer);  
  
auto pTextField = UITextField::create();  
pTextField->setPosition(Point(s.width / 2, s.height - 100));  
pTextField->setTouchEnabled(true);  
pTextField->setText("1000");  
pTextField->attachWithIME();  
pTextField->setColor(Color3B(140, 63, 63));  
pTextField->setFontName("Arial");  
pTextField->setFontSize(35);  
pTextField->setDeleteBackward(true);  
pLayer->addWidget(pTextField);  

事件机制改动比较大,原来Layer上启用的重力加速计事件机制和触摸输入事件机制不能再使用,需要自己手动加入监听事件,可以在任何Node节点上加入事件监听。见如下代码:

 
void FSMainLayer::onEnter() {  
         LayerGradient::onEnter();  
  
         auto listener = EventListenerTouchOneByOne::create();  
         //listener->onTouchBegan = CC_CALLBACK_2(FSMainLayer::onTouchBegan, this);  
         //listener->onTouchMoved = CC_CALLBACK_2(FSMainLayer::onTouchMoved, this);  
         //listener->onTouchEnded = CC_CALLBACK_2(FSMainLayer::onTouchEnded, this);  
         //listener->onTouchCancelled = CC_CALLBACK_2(FSMainLayer::onTouchCancelled, this);  
         //此处可以使用上述注释掉的代码来写触摸事件的回调,也可以用lambda表达式来实现回调,笔者展示下如何在新版本使用Lambda表达式  
    listener->onTouchBegan = [&](Touch *touch, Event *unused_event)->bool {  
  
        return true;  
    };  
    listener->onTouchMoved = [&](Touch *touch, Event *unused_event) {  
  
    };  
    listener->onTouchEnded = [&](Touch *touch, Event *unused_event) {  
  
    };  
    listener->onTouchCancelled =  [&](Touch *touch, Event *unused_event) {  
  
    };  
  
  
  
       _eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);  
  
} 
  • 内存管理方面,继续保留了Objective-c风格的内存计数机制,但是需要注意的是使用clone()代替了copy(),如果继续使用copy()程序能通过编译,但运行时将会崩溃
  • 新加了对Cocostudio支持,并支持直接解析Flash的DragoneBones骨骼动画
  • 物理引擎集成到Cocos2d-x工程里,更易于使用
  • 桌面平台支持鼠标
  • 添加JS和Lua绑定
  • 提升对64-bit架构的支持
  • 支持freetype2
  • 采用python脚本来创建新工程等
  • cocos2d-x-3.0beta的目录结构层次划分更加合理,如下图示,下面开始对每个目录分别介绍:


cocos基础教程(3)cocos3.x版本目录结构介绍

  1、其中sample目录是存放Cocos2d-x的所有例子工程(包括C++、Lua、Javascript三种不同的语言版本),WatermelonWithMe:一个js脚本写的控制着满载西瓜的小车并不掉落一个西瓜地走到终点的物理游戏例子,非常有趣,;MoonWarriors:一个类似全民飞机大战的js脚本游戏例子;CocosDragonJS:一个JS脚本写的类似是男人就上一百层之类的敏捷游戏例子;CrystalCraze:一个JS脚本写的宝石消除类游戏;Hello例子:分别为C++版本的HelloCpp、Lua版本的HelloLua;SimpleGame则是一个C++语言实现的射击小游戏;JS Common目录则放了一些JS脚本的常用工具函数等;Lua Common则放了Lua脚本的常用工具函数等;其中最具参考价值就是分别用三种语言版本的cocos2d-x的API单元测试例子:TestCpp、TestLua、TestJavascript。

2、通过build目录,可以打开不同平台的版本的Sample里的工程例子,如下图是Mac版和iOS版的工程例子,

  • 对于Mac或iOS直接双击build目录下的cocos2d_samples.xcodeproj文件即可打开sample目录里的所有工程例子:

cocos基础教程(3)cocos3.x版本目录结构介绍

  • 对于Linux平台,通过如下命令安装并运行sample目录里的工程例子:
cd /Users/ericli/Documents/cocos2d-x-3.0beta/build  
./install-deps-linux.sh  
cmake ..  
make  
  
bin/hellocpp/hellocpp 
  • windows平台,也是双击打开build录下的cocos2d-win32.vc2012.sln文件即可。
  • android平台,通过如下命令运行sample录里的工程例子:
cd /Users/ericli/Documents/cocos2d-x-3.0beta/build  
python ./android-build.py hellocpp  

 3cocos录是cocos2d-x引擎的核心代码目录,目录下又分为:2d(核心图形引擎、事件响应引擎、底层平台支持)、audio(不同平台的音频引擎支持)、base(Cocos2d-x模仿Objective-c的Foundation框架的一些基本类以及3.0增加的模仿C++11的容器类扩展支持,比如:__Array、__Dictionary、Data、Vector等)、editor-support编辑器支持,包括cocosbuilder场景编辑器、cocostudio编辑器(包括UI动画、场景、数据)、spine骨骼动画编辑器)、gui(Viva童鞋贡献的一套新的GUI控件库)、math(cocos2d-x带的数学库,提供了一些OpenGL层绘制用到的一些数据结构以及参数设置)、network(提供了Http讯和Soket讯)、physics(集成chipmunk物理引擎,相比alpha版去掉了对box2d的支持,可能是考虑到chipmunk轻量易用吧)、storage(本地存储数据库支持)、scripting(lua和javascript脚本支持)。

cocos基础教程(3)cocos3.x版本目录结构介绍

 4、关于docs文件,里面只要包含了生成cocos2d-x的配置文件,可以通过doxygen去生成cocos2d-x文件,不过需要确保安装了doxygen,可以通过Homebrew软件包管理下载安装(请先自行安装Homebrew,在终端输入命令即可安装:ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"),在终端输入如下命令:

$ sudo brew doctor  
Your system is ready to brew.  
$ brew search doxygen  
doxygen  
$ brew install doxygen 

安装doxygen成功后,输入如下命令生成cocos2d-x的文档:

$ cd /Users/ericli/Documents/cocos2d-x-3.0beta/docs   
$ sudo doxygen doxygen.config  

直到见到下图字样,表示文档生成成功。

cocos基础教程(3)cocos3.x版本目录结构介绍

此时在docs目录下,可以看见多了html目录,里面有很多html文档,双击即可用浏览器打开文档,如下图

cocos基础教程(3)cocos3.x版本目录结构介绍

5extensions录则是一些对Cocos2d-x主引擎的扩展类,包括资源管理类AssetsManager和CCEditBox、CCScrollView、CCPhysicsSprite等。

6external目录下是所有cocos2d-x引擎引用的开源库,如下图,其中值得注意的是cocos2d-x3.0新加入了freetype2库,这是一个文字布局的开源库,可以实现很强大的富文本功能,许多大型的端游都采用该开源库实现聊天富文本功能。

cocos基础教程(3)cocos3.x版本目录结构介绍

7licenses就存放MIT许可证等证书文件,不详细介绍。

8plugin录包含了admob(移动广告)、alipay(支付宝)、flurry(移动应用统计分析平台)、nd91(91助手平台)、qh360(奇虎360戏平台)、twitter(twitter社交平台)、uc(UC戏平台)、umeng(友盟平台)、weibo(新浪微博平台)等第三方插件的集成管理以及js脚本支持。

9template录提供了生成C++、lua和Javascript三种语言的跨平台工程模板。

10tools录下放了各种功能的python工具文件,包括C++类映射为lua和javascript脚本的工具、创建新工程的工具等。