简介

  • 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 / , s.height - ));
pTextField->setTouchEnabled(true);
pTextField->setText("");
pTextField->attachWithIME();
pTextField->setColor(Color3B(, , ));
pTextField->setFontName("Arial");
pTextField->setFontSize();
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的目录结构层次划分更加合理,如下图示,下面开始对每个目录分别介绍:

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目录里的所有工程例子:

  • 对于Linux平台,通过如下命令安装并运行sample目录里的工程例子:
cd /Users/ericli/Documents/cocos2d-x-.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-.0beta/build
python ./android-build.py hellocpp

3、cocos目录是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脚本支持)。

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-.0beta/docs
$ sudo doxygen doxygen.config

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

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

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

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

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

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

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

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

cocos基础教程(3)cocos3.x版本目录结构介绍的更多相关文章

  1. (3.1)mysql基础深入——mysql二进制与源码目录结构介绍

    (3.1)mysql基础深入——mysql二进制与源码目录结构介绍 关键字:二进制目录结构,源码目录结构(编译安装目录结构) 1.二进制安装程序目录结构 [1] BIN -- mysql的可执行文件( ...

  2. Magento学习第一课——目录结构介绍

    Magento学习第一课--目录结构介绍 一.Magento为何强大 Magento是在Zend框架基础上建立起来的,这点保证了代码的安全性及稳定性.选择Zend的原因有很多,但是最基本的是因为zen ...

  3. Vue 入门之目录结构介绍

    Vue 是一套用于构建用户界面的渐进式框架,与其它大型的页面框架不同的是,Vue 被设计为可以自底向上逐层应用.Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合.另一方面,当 ...

  4. ExtJs4.1目录结构介绍和使用说明[转]

    一.在做ExtJs开发之前首先要到网站上下载ExtJs的开发包,我用的最新版本是4.1.1.此版本相对于之前的版本目录结构发生了一些变化,没有了adapter目录, 目录结构如下 文件/文件夹名的作用 ...

  5. Django 创建 APP和目录结构介绍

    一.通过pip安装Django 以windows 系统中使用pip命令安装为例 win+r,调出cmd,运行命令:pip install django自动安装PyPi 提供的最新版本.指定版本,可使用 ...

  6. vue学习笔记(三)——目录结构介绍

    1.初始目录结构如下: 2.目录结构介绍 目录/文件 说明 build 最终发布的代码存放位置. config 配置目录,包括端口号等.我们初学可以使用默认的. node_modules npm 加载 ...

  7. create-react-app脚手架的安装和目录结构介绍

    1.对脚手架的初步了解 编程领域中的“脚手架”指的是能够快速搭建项目“骨架”的一类工具,例如大多数的React项目都有src,public,webpack配置文件等等,而src目录中又包含compon ...

  8. vue 目录结构介绍

    1 初始目录如下: 2 目录结构介绍 bulid:最终帆布的代码存放位置 config:配置目录,包括端口号等 node_modules:npm加载的项目依赖模块 src:z这里是我们要开发的目录,基 ...

  9. Flutter 目录结构介绍、入口、自定义 Widget、MaterialApp 组件、Scaffold 组件

    Flutter 目录结构介绍 文件夹 作用 android android 平台相关代码 ios ios 平台相关代码 lib flutter 相关代码,我们主要编写的代 码就在这个文件夹 test ...

随机推荐

  1. 一个基于.NET平台的自动化/压力测试系统设计简述

    AutoTest系统设计概述 AutoTest是一个基于.NET平台实现的自动化/压力测试的系统,可独立运行于windows平台下,支持分布式部署,不需要其他配置或编译器的支持.(本质是一个基于协议的 ...

  2. Android中的Intent详解

    前言: 每个应用程序都有若干个Activity组成,每一个Activity都是一个应用程序与用户进行交互的窗口,呈现不同的交互界面.因为每一个Acticity的任务不一样,所以经常互在各个Activi ...

  3. css自定义字体

    @font-face { font-family: 华文隶书; src: url( ../font/STLITI.eot ); /* IE */ src: url( ../font/STLITI.tt ...

  4. [AaronYang]C#人爱学不学[2]

    1. 记事本写C#,脱离vs 新建记事本,名字为 helloworld.cs using System; namespace Hello{ public class HelloWorldSay{ st ...

  5. Moqui之时间转换

    <script><![CDATA[ if (fromDate == null && thruDate == null && year &&am ...

  6. linux 查看服务器性能常用命令

    一.top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器   下面详细介绍它的使用方法.top是一个动态显示过程,即可以通过用户按键来 ...

  7. Linux下巧用my.cnf,mysql连接服务器不需要输入账号密码信息

    Linux下每次用mysql连接连接服务器,常常用如下方式: [root@localhost ~]# mysql -hlocalhost -uroot -p11111 每次都输入用户名,密码,多折腾人 ...

  8. oracle 的安装脚本

    ==[root@oracle ~]# cat 1.preusers.sh ==#!/bin/bash#Purpose:Create 3 groups named 'oinstall','dba','o ...

  9. 幻灯片插件FlexSlider -- Amaze UI幻灯片参数

    用了Amaze UI 的人就知道,其幻灯片插件是 data-am-slider='{}'来传参数的:(以下代码来自Amaze UI 官网) <div data-am-widget="s ...

  10. Java 并发-访问量

    有几个常用的措施 1.对常用功能建立缓存模块 .尽量使用缓存,包括用户缓存,信息缓存等,多花点内存来做缓存,可以大量减少与数据库的交互,提高性能.统计的功能尽量做缓存,或按每天一统计或定时统计相关报表 ...