【cocos2dx开发技巧10】cocosStudio的集成以及c++11的新特性
转发。请保持地址: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="">
所以做对应的调整。确保路径正确。
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表达式
这将为编码带来极大的方便,上面的样例代码。非常好地体现了。
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要调用的代码
});
另外很多其它技术分享和讨论,请加群:385121586
參考:
官方样例中的ExtensionTest/CocoStudioSceneTest/SceneEditorTest.cpp
【cocos2dx开发技巧10】cocosStudio的集成以及c++11的新特性的更多相关文章
- 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. ...
- 【Qt开发】Qt5 中对 C++11 一些新特性的封装
C++11 是现在的 C++ 标准的名称,C++11 为 C++ 语言带来很多新特性. 而 Qt 4.8 是 Qt 首个在其 API 中开始使用一些新的 C++11 特性的版本,我之前写过一篇博文:C ...
- Android 10 终于来了!增加了不少新特性
前言 Android 10 正式发布了,根据官网的介绍,聚焦于隐私可控.手机自定义与使用效率,此版本主要带来了十大新特性: image 智能回复 使用机器学习来预测你在回复信息时可能会说些什么,这 ...
- 50个Android开发技巧(10 为TextView加入样式)
首先来看一个控件的例子: (原文地址:http://blog.csdn.net/vector_yi/article/details/24428085) 手机上类似这种场景你一定已经见过非常多次了,但有 ...
- 【cocos2dx开发技巧8】自定义控件-使自定义控件具有RGBA特性
转发,请保持地址:http://blog.csdn.net/stalendp/article/details/9948545 虽然CCNodeRGBA,CCLayerRGBA,sprite等提供颜色和 ...
- 前端开发攻城师绝对不可忽视的五个HTML5新特性
HTML5已经火了一段时间了,相信作为web相关开发工程师,肯定或多或少的了解和尝试过一些HTML5的特性和编程.还记得以前我们介绍过的HTML5新标签. 作为未来前端开发技术的潮流和风向标,HTML ...
- Python 3.10 明年发布,看看都有哪些新特性?
我们目前生活在Python 3.8的稳定时代,上周发布了Python的最新稳定版本3.8.4.Python 3.9已经处于其开发的beta阶段,并且2020年7月3日预发布了beta版本(3.9.0b ...
- Tornado开发技巧,简单了解tornado
tornado基础入门(一)——简单了解tornado 参考:http://demo.pythoner.com/itt2zh/ch1.html tornado是一个轻量级的web框架,是一个用pyth ...
- codeigniter框架开发技巧
codeigniter框架开发技巧 来源:未知 时间:2014-10-20 11:36 阅读数:171 作者:xbdadmin [导读] (1)自动加载modelsphp5风格 使用这个 ...
随机推荐
- AC日记——Two poj 1849
Two 思路: 树形DP求直径: 答案是边权总和*2-直径: dp[i][1]::以i为根的子树中最长的路径: dp[i][0]::以i为根的子树中次长的路径: 来,上代码: #include < ...
- EntityFramework之一对多关系(三)
上篇介绍了一对一关系,下面介绍下一对多关系代码编写. 1.新建model实体,Product是产品类,Order是订单,一个产品对应多个订单 public class Product { public ...
- 史上最全的web前端开发程序员学习清单!
今天为什么要给大家分享这篇文章呢,我发现最近来学前端的特别多,群里面整天都有人问:前端好找工作吗?前端要怎么学啊?前端工资怎么样?前端XX,前端XXX,虽然我回答过无数次这种问题了,但是问这个的还是有 ...
- Netty源码学习(零)前言
本系列文章将介绍Netty的工作机制,以及分析Netty的主要源码. 基于的版本是4.1.15.Final(2017.08.24发布) 水平有限,如有谬误请留言指正 参考资料 the_flash的简书 ...
- Mybatis中的XML中需要用到的转义符号整理
使用这么久的Mybatis中需要转义的符号整理一下,小结一下: 1. < 小于符号 < 2. <= 小于等于 ...
- 六. 异常处理6.try语句的嵌套
Try语句可以被嵌套.也就是说,一个try语句可以在另一个try块内部.每次进入try语句,异常的前后关系都会被推入堆栈.如果一个内部的try语句不含特殊异常的catch处理程序,堆栈将弹出,下一个t ...
- iOS 获取当前经纬度
一般说来LBS功能一般分为两块:一块是地理定位,就是获取当前精度.纬度和地理位置的功能,这一部分功能主要用到CoreLocation.Frameworks.一部分就是显示地图信息.丰富地图内容等,这一 ...
- C语言基础之注释与常见错误
总结起来,注释有三种: 1.单行注释 1: //哈哈 单行注释 2.多行注释 1: /* 2: asdfasdfasdfasdfasdf 3: */ 其中多行注释如果这样写 1: /* 2: * 函数 ...
- SQL SERVER 补丁查看
SELECT @@VERSION as 版本情况 SELECT SERVERPROPERTY('ProductVersion') as 产品版本编号, SERVERPROPERTY('Produc ...
- .NET Core简介
内容主要来源 https://docs.asp.net/en/latest/conceptual-overview/dotnetcore.html 什么是.NET Core .NET Core 5 包 ...