转发。请保持地址: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. SqlServer 2014安装指引

    具体步骤看整理的Word文档 链接:https://pan.baidu.com/s/1zOhaFVpro2DNnJlJ6dbSEg 密码:lj4m 具体步这里不介绍了,这里记录下报错信息 这个是说系统 ...

  2. Vue v-for嵌套数据渲染问题

    Vue v-for嵌套数据渲染问题 问题描述: 由于在获取商品子分类的时候,同时需要获取子分类下的商品,那么多层的列表渲染就只能是第一层好用 问题原因: vue在处理多层的渲染的时候,不能直接用等号赋 ...

  3. 在C#中将数字转换成中文

    上篇我们讲了在MSSQL中将数字转换成中文,这篇我们讲讲在C#中将数字转换成中文 下篇将讲一下如何将金额转换成中文金额,废话不多说,具体代码如下: /// <summary> /// 数字 ...

  4. 51nod 1086 背包问题 V2 【二进制/多重背包】

    1086 背包问题 V2  基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题  收藏  关注 有N种物品,每种物品的数量为C1,C2......Cn.从中任选若干件放 ...

  5. Codeforces Round #377 (Div. 2) A. Buy a Shovel【暴力/口袋里面有无限枚 10 元和一枚 r 面值的硬币,问最少可以买多少把价值为 k 的铁铲】

    A. Buy a Shovel time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...

  6. Python_Tips[0] -> 关于 import

    关于 import 1 import import可用于导入一个Python的标准模块,包括.py文件或带有__init__.py的文件目录. 在Python中,import一个模块后,若再次impo ...

  7. springboot的配置文件

    一.springboot配置文件值的注入 @ConfigurationProperties(prefix = "xxx") 实例代码: @Component @Configurat ...

  8. Spfa【P1813】拯救小tim_NOI导刊2011提高(02)

    Description 小tim在游乐场,有一天终于逃了出来!但是不小心又被游乐场的工作人员发现了„„所以你的任务是安全地把小tim护送回家.但是,A市复杂的交通状况给你出了一大难题. A市一共有n个 ...

  9. 【bzoj2839】【集合计数】容斥原理+线性求阶乘逆元小技巧

    (上不了p站我要死了,侵权度娘背锅) Description 一个有N个元素的集合有2^N个不同子集(包含空集),现在要在这2^N个集合中取出若干集合(至少一个),使得 它们的交集的元素个数为K,求取 ...

  10. oracle中执行execute的时候报异常ORA-01031的解决办法

    在做实验的时候,编写关于"在存储过程中使用动态sql,建立一个统计表,并把统计结果,插入这个表中"的PL/sql语句在执行时出现权限不足的问题. 上网查询很多,看到了下面这篇博文( ...