转发。请保持地址:http://blog.csdn.net/stalendp/article/details/38880997

非常长时间没有碰cocos2dx了,近期又用起来了。花了好几个小时又一次熟悉了一下,发现非常多新的特性值得用来写文章。好吧,先从最经常使用的開始。

近期用windows,使用cocosStudio。就从这个開始吧。顺带介绍一下project的创建。以及c++11的特性。

曾经开发使用cocosBuilder开发界面(相关集成见这篇文章)。

准备工作

1)准备NDK、andrdoid-SDK,VisualStudio等工具。并环境变量设置NDK_ROOT,ANDROID_SDK_ROOT,Path等

2)安装Python 2.7.x (不是3.x.x);

3)下载cocos2d-x-3.2压缩包

创建游戏项目

打开命令行工具,切换到cocos2d-x-3.2文件夹下。运行命令:

1)  setup.py, 用来环境变量设置

2)cocos new circleTheLine -p com.evilgame.circleTheLine -l cpp -d x:\your\project\path , 用来创建项目

在2)命令运行完后, x:\your\project\path文件夹下。会出现例如以下内容;点击proj.win32下的visualStudio工程,就能够打开项目。

使用CocosStudio创建界面

我这里仅仅是做一个页面,所以仅仅选择UI Editor来制作。

制作的界面例如以下:

然后把该项目导出,得到NewUi_1.json。test.png, test.plist文件。把这三个文件复制到游戏根文件夹下的Resources文件夹下。

集成cocos2dx

如今的目标是。当用户点击“測试button”后,改变界面上的文字。

1)增加对应的libproject。

由于cocosStudio的使用,须要依赖于libCocosStudio, libGUI, libExtensions三个库。详细路径例如以下(D:\Program Files\cocos2d-x-3.2\为根文件夹)

libCocosStudio D:\Program Files\cocos2d-x-3.2\cocos\editor-support\cocostudio
libGUI D:\Program Files\cocos2d-x-3.2\cocos\ui\proj.win32
libExtensions D:\Program Files\cocos2d-x-3.2\extensions\proj.win32

须要改动visualStudio,对它们进行引用。详细例如以下:

1a) 把上面的三个project增加“解决方式”中。

右击项目。在弹出的菜单中选择 加入/现有项,例如以下:

1b) 加入引用依赖:(解决链接的问题)

右击项目,在弹出的菜单中选择 属性,在弹出的对话框中做例如以下操作:

1c)加入头文件:(解决编译的问题)

#include "cocostudio/CocoStudio.h"
#include "ui/CocosGUI.h" USING_NS_CC;
using namespace cocostudio;
using namespace ui;

注意,命名空间ui,事实上是cocos2d的子命名空间;所以须要写在USING_NS_CC以下,或者写成:

using namespace cocos2d::ui;

假设上面路径无法找到,请依照以下的方法,查看是否包括了对应的路径。

右击项目,在弹出的菜单中选择 属性,在弹出的对话框中做例如以下操作:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc3RhbGVuZHA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

当中@{EngineRoot}是宏变量。用来指定cocos2dx的根文件夹(我这里是D:\Program Files\cocos2d-x-3.2\);头文件就是相对于这里的“附加包括文件夹”的设置的。

所以做对应的调整。确保路径正确。

2)显示该界面:

        node = GUIReader::shareReader()->widgetFromJsonFile("NewUi_1.json");
// 这里的node是类变量
if (node == nullptr)
{
return true;
}
this->addChild(node); // 当然读取场景文件,能够用下面的语句
// CCNode *pNode = SceneReader::sharedSceneReader()->createNodeWithSceneFile("SceneEditorTest/SceneEditorTest.json");

3)绑定button事件:

	Button* button = static_cast<Button*>(node->getChildByName("btnTest"));
button->addTouchEventListener([&](Ref* sender, Widget::TouchEventType type) {
if (type == Widget::TouchEventType::ENDED) {
// 注意node的生命周期的问题
TextBMFont* nn = static_cast<TextBMFont*>(node->getChildByName("displayMsg"));
nn->setString("msg changed!!");
}
});

上面的代码使用了C++11的lambda表达式特性,以下将做介绍。

C++11特性--lambda表达式

c++最终能够使用lambda表达式了!

这将为编码带来极大的方便,上面的样例代码。非常好地体现了。

1) 三种方法的对照:
写法1(未用lambda表达式):
auto closeItem = MenuItemImage::create(
"CloseNormal.png",
"CloseSelected.png",
CC_CALLBACK_1(HelloWorld::menuCloseCallback,this)); void HelloWorld::menuCloseCallback(Object* sender)
{
Director::getInstance()->end();
}

写法2(lambda函数指针):

auto callEnd = [](Object* sender)
{
Director::getInstance()->end();//直接在这里加入button要调用的代码
};
auto closeItem = MenuItemImage::create(
"CloseNormal.png",
"CloseSelected.png",
allEnd);

写法3(lambda表达式):

auto closeItem = MenuItemImage::create(
"CloseNormal.png",
"CloseSelected.png",
[](Object* sender)
{
Director::getInstance()->end();//直接在这里加入button要调用的代码
});
假设要设定表达式可以訪问外部变量。可以在 [] 内写入 & 或者 = 加上变量名,当中 & 表示按引用訪问。= 表示按值訪问。变量之间用逗号分隔,比方 [=factor, &total] 表示按值訪问变量 factor,而按引用訪问 total。假设是引用的话。须要注意该对象的生命周期,回调函数的生命周期和控件同样。

另外很多其它技术分享和讨论,请加群:385121586

參考:

C++11特性:http://blog.csdn.net/star530/article/details/19913611

官方样例中的ExtensionTest/CocoStudioSceneTest/SceneEditorTest.cpp

【cocos2dx开发技巧10】cocosStudio的集成以及c++11的新特性的更多相关文章

  1. atitit.Oracle 9 10 11 12新特性attilax总结

    atitit.Oracle 9  10 11  12新特性 1. ORACLE 11G新特性 1 1.1. oracle11G新特性 1 1.2. 审计 1 1.3. 1.   审计简介 1 1.4. ...

  2. 【Qt开发】Qt5 中对 C++11 一些新特性的封装

    C++11 是现在的 C++ 标准的名称,C++11 为 C++ 语言带来很多新特性. 而 Qt 4.8 是 Qt 首个在其 API 中开始使用一些新的 C++11 特性的版本,我之前写过一篇博文:C ...

  3. Android 10 终于来了!增加了不少新特性

    前言 Android 10 正式发布了,根据官网的介绍,聚焦于隐私可控.手机自定义与使用效率,此版本主要带来了十大新特性:   image 智能回复 使用机器学习来预测你在回复信息时可能会说些什么,这 ...

  4. 50个Android开发技巧(10 为TextView加入样式)

    首先来看一个控件的例子: (原文地址:http://blog.csdn.net/vector_yi/article/details/24428085) 手机上类似这种场景你一定已经见过非常多次了,但有 ...

  5. 【cocos2dx开发技巧8】自定义控件-使自定义控件具有RGBA特性

    转发,请保持地址:http://blog.csdn.net/stalendp/article/details/9948545 虽然CCNodeRGBA,CCLayerRGBA,sprite等提供颜色和 ...

  6. 前端开发攻城师绝对不可忽视的五个HTML5新特性

    HTML5已经火了一段时间了,相信作为web相关开发工程师,肯定或多或少的了解和尝试过一些HTML5的特性和编程.还记得以前我们介绍过的HTML5新标签. 作为未来前端开发技术的潮流和风向标,HTML ...

  7. Python 3.10 明年发布,看看都有哪些新特性?

    我们目前生活在Python 3.8的稳定时代,上周发布了Python的最新稳定版本3.8.4.Python 3.9已经处于其开发的beta阶段,并且2020年7月3日预发布了beta版本(3.9.0b ...

  8. Tornado开发技巧,简单了解tornado

    tornado基础入门(一)——简单了解tornado 参考:http://demo.pythoner.com/itt2zh/ch1.html tornado是一个轻量级的web框架,是一个用pyth ...

  9. codeigniter框架开发技巧

    codeigniter框架开发技巧 来源:未知    时间:2014-10-20 11:36   阅读数:171   作者:xbdadmin [导读] (1)自动加载modelsphp5风格 使用这个 ...

随机推荐

  1. CF985B Switches and Lamps【矩阵操作/枚举】

    [链接]CF985B [题意]:给n盏灯,m个开关,每次按开关只能将灯从灯灭的状态转变为灯亮,问是否存在不按所有开关就将所有灯打开的方法. [分析]:有两种办法,一种代码复杂点,容易想到枚举去掉每一行 ...

  2. MySql笔记之操作数据库

    看前引导 ♦MySQL默认的端口号:3306 ♦MySQL中的超级用户:root ♦SQL语句结尾必须以分号结尾 ♦语法使用介绍 花括号  必须有的部分 中括号  可选项 ,可有可无 竖线  从这个当 ...

  3. maven的知识图谱

    maven 1.maven的好处 java项目管理工具 依赖管理 对jar包统一管理 项目名称 公司/组织 版本信息 本地仓库 由于索引的存在,找jar包很快 项目构建 依赖管理 传统项目 很大 包含 ...

  4. cdq分治浅谈

    $cdq$分治浅谈 1.分治思想 分治实际上是一种思想,这种思想就是将一个大问题划分成为一些小问题,并且这些小问题与这个大问题在某中意义上是等价的. 2.普通分治与$cdq$分治的区别 普通分治与$c ...

  5. jcl sort comp3 to 表示型

    Lets say your packed data is at 10th column and is of length 6, S9(4)V99 You could try the following ...

  6. AtCoder - 3962 Sequence Growing Hard

    Problem Statement Find the number of the possible tuples of sequences (A0,A1,…,AN) that satisfy all ...

  7. NOI2016 高中OI生涯的最后一站

    你乘坐的航班XXX已经抵达终点站——四川绵阳. “呼——”机舱外的天空灰沉沉的,不禁有些压抑与紧张. 一出机场,就看见南山中学的牌子,黄色衣服的志愿者们,还有热情的老师们. 感觉刚才的情绪又一扫而空了 ...

  8. 【转载】【面试经验】PHP中级面试题

    By chajian8.com - Last updated: 2012/05/24 21:13:12 - 17 views - Posted in PHP, 职场/生活/面试 - Tags: PHP ...

  9. 在SQL Server中查看对象依赖关系

    原文 在SQL Server中查看对象依赖关系 Viewing object dependencies in SQL Server   Deleting or changing objects may ...

  10. What is Mocking?

    Mocking is primarily used in unit testing. An object under test may have dependencies on other (comp ...