Cocos2d-x 3.1.1 学习笔记(一)关联程序逻辑与CocosStudio导出文件
2014-07-09 20:27
751 查看
项目开始启动,Team leaer要求我先做简单的事情,熟悉一下背景音乐和音效的函数。
由于Cocos2d-x的版本更新,网络上我找到的教程不太适合我配置的Cocos2d-x的版本,所以我把我实现的过程写一下。我使用的是cocos2d-x-3.1.1
个人认为,Cocos Studio是一个挺强大的工具集,工具集中的每一个编辑器都是面向特定的人员而定制的。通过在工具层面的分工,可以使每一个工作岗位的工作相互独立,减少相互之间的耦合性,使每一个工作人员能够专心于自己的业务。那如何使用CocosStudio创建UI并载入到程序中,不妨参照一下该教程
我觉得这个系列的教程都写得很好,只是版本不太适合3.1.1而已。而且UI载入到程序中的代码有点问题。
1. UI载入到程序中
(1) 先添加需要的库
由于cocos2d-x3.0工作目录是放在其它地方,所以要引用 libCocoStuido、libGUI、libExtension这三个库。
添加库方法:在“解决方案资源管理器”中找到整个解决方案,右击,选择“添加”->“现有项目”
选择“%你的Cocos2d-x路径%\cocos\editor-support\cocostudio\proj.win32\libCocosStudio”
选择“%你的Cocos2d-x路径%\cocos\ui\proj.win32\libGUI”
选择“%你的Cocos2d-x路径%\extensions\proj.win32\libExtensions”
(2)添加引用
找到目标项目(我的是“HelloStudio”), 右击,选择"引用",在弹出的属性页中点选下面的“添加新引用”。在弹出的子级对话框中选择我们需要的库,点击确定,即可添加项目对库的引用。
(3)添加包含目录
右击项目->属性->配置属性->c/c++->常规->加入包含目录。编辑,添加“$(EngineRoot)cocos\editor-support”和“$(EngineRoot)cocos”。
(4)引入头文件 #include "cocostudio\CocoStudio.h"
(5)更改HelloWorld类中的init()方法
现在已经将UI资源载入到程序中了。以下是程序运行结果:
以上过程我参考的资料:cocos2dx 3.0使用CocosStudio项目
2. 实现对Button控件的使用
(1)找到资源中的Button。
我在CocosStudio中将三个按钮分别命名为"Play","Pause","Effect",可以根据它们的名字找到它们。继续在HelloWorld类中的init()方法中添加以下代码
这里Helper是用来寻找资源里对应的控件,它的寻找方式有三种:
(2)然后绑定事件监听,貌似有人说这个过程是就是挂载,不太清楚~
(3)接着实现对Button事件的响应。
先在HolloWorld类中定义void touchButton(Object *pSender, TouchEventType type)函数,实现如下:
运行后,可以在 调试输出那里看到结果。
那TouchEventType是神马东东呢,其实就是一些触摸回调,可以查看一下头文件:
3.使用背景音乐和音效
最后是为了完成Leader的要求,还是要加一下对背景音乐和音效的函数使用。具体的背景音乐和音效的函数可以参考背景音乐和音效,非常详细!绝对是业界良心~~O(>_<)O
①使用CocosDenshion
由于Cocos2d-x的版本更新,网络上我找到的教程不太适合我配置的Cocos2d-x的版本,所以我把我实现的过程写一下。我使用的是cocos2d-x-3.1.1
个人认为,Cocos Studio是一个挺强大的工具集,工具集中的每一个编辑器都是面向特定的人员而定制的。通过在工具层面的分工,可以使每一个工作岗位的工作相互独立,减少相互之间的耦合性,使每一个工作人员能够专心于自己的业务。那如何使用CocosStudio创建UI并载入到程序中,不妨参照一下该教程
我觉得这个系列的教程都写得很好,只是版本不太适合3.1.1而已。而且UI载入到程序中的代码有点问题。
1. UI载入到程序中
(1) 先添加需要的库
由于cocos2d-x3.0工作目录是放在其它地方,所以要引用 libCocoStuido、libGUI、libExtension这三个库。
添加库方法:在“解决方案资源管理器”中找到整个解决方案,右击,选择“添加”->“现有项目”
选择“%你的Cocos2d-x路径%\cocos\editor-support\cocostudio\proj.win32\libCocosStudio”
选择“%你的Cocos2d-x路径%\cocos\ui\proj.win32\libGUI”
选择“%你的Cocos2d-x路径%\extensions\proj.win32\libExtensions”
(2)添加引用
找到目标项目(我的是“HelloStudio”), 右击,选择"引用",在弹出的属性页中点选下面的“添加新引用”。在弹出的子级对话框中选择我们需要的库,点击确定,即可添加项目对库的引用。
(3)添加包含目录
右击项目->属性->配置属性->c/c++->常规->加入包含目录。编辑,添加“$(EngineRoot)cocos\editor-support”和“$(EngineRoot)cocos”。
(4)引入头文件 #include "cocostudio\CocoStudio.h"
(5)更改HelloWorld类中的init()方法
<span style="font-size:14px;">bool HelloWorld::init() { ////////////////////////////// // 1. super init first if ( !Layer::init() ) { return false; } Size visibleSize = Director::getInstance()->getVisibleSize(); Vec2 origin = Director::getInstance()->getVisibleOrigin(); auto uiLayer = cocostudio::GUIReader::getInstance()->widgetFromJsonFile("NewUi/NewUi_1.ExportJson"); this->addChild(uiLayer); return true; }</span>
现在已经将UI资源载入到程序中了。以下是程序运行结果:
以上过程我参考的资料:cocos2dx 3.0使用CocosStudio项目
2. 实现对Button控件的使用
(1)找到资源中的Button。
我在CocosStudio中将三个按钮分别命名为"Play","Pause","Effect",可以根据它们的名字找到它们。继续在HelloWorld类中的init()方法中添加以下代码
//找到资源中的按钮/////// Button* playbutton = static_cast<Button*>(Helper::seekWidgetByName(uiLayer,"Play")); Button* pausebutton = static_cast<Button*>(Helper::seekWidgetByName(uiLayer,"Pause")); Button* effectbutton = static_cast<Button*>(Helper::seekWidgetByName(uiLayer,"Effect"));其实除了通过名字找到它们,还可通过它们的tag找到它们
这里Helper是用来寻找资源里对应的控件,它的寻找方式有三种:
static Widget* seekWidgetByTag(Widget* root, int tag);//通过tag找到该控件 static Widget* seekWidgetByName(Widget* root, const char* name);//通过名称找到该控件 static Widget* seekActionWidgetByActionTag(Widget* root, int tag);//通过tag找到该动作除此之外,这里用到的Button不是Cocos2d的类,需要添加别的头文件。同时,为了使用省事一点,我也文件中声明了作用域。
#include "ui\CocosGUI.h" using namespace cocos2d::ui;
(2)然后绑定事件监听,貌似有人说这个过程是就是挂载,不太清楚~
playbutton->addTouchEventListener(this, toucheventselector(HelloWorld::touchButton)); pausebutton->addTouchEventListener(this, toucheventselector(HelloWorld::touchButton)); effectbutton->addTouchEventListener(this, toucheventselector(HelloWorld::touchButton));
(3)接着实现对Button事件的响应。
先在HolloWorld类中定义void touchButton(Object *pSender, TouchEventType type)函数,实现如下:
void HelloWorld::touchButton(Object *pSender, TouchEventType type) { auto button = static_cast<Button*>(pSender); string name = button->getName(); switch (type) { case TOUCH_EVENT_ENDED: if( name == "Play") CCLOG("touch play"); else if( name == "Pause") CCLOG("touch pause"); else if( name == "Effect") CCLOG("touch effect"); break; default: break; } }
运行后,可以在 调试输出那里看到结果。
那TouchEventType是神马东东呢,其实就是一些触摸回调,可以查看一下头文件:
typedef enum { TOUCH_EVENT_BEGAN, TOUCH_EVENT_MOVED, TOUCH_EVENT_ENDED, TOUCH_EVENT_CANCELED }TouchEventType;对于Button的使用的实现基本如上。 我参看的资料有:关联程序逻辑与CocosStudio导出文件 和Button和CheckBox控件的使用流程
3.使用背景音乐和音效
最后是为了完成Leader的要求,还是要加一下对背景音乐和音效的函数使用。具体的背景音乐和音效的函数可以参考背景音乐和音效,非常详细!绝对是业界良心~~O(>_<)O
①使用CocosDenshion
#include "SimpleAudioEngine.h" using namespace CocosDenshion;②在init()方法中先预加载背景音乐和音效。
SimpleAudioEngine::sharedEngine()->preloadBackgroundMusic("music/bgm.mp3"); SimpleAudioEngine::sharedEngine()->preloadEffect("music/sound2.wav");③利用touchButton()响应接触的方法来实现
void HelloWorld::touchButton(Object *pSender, TouchEventType type) { auto button = static_cast<Button*>(pSender); string name = button->getName(); switch (type) { case TOUCH_EVENT_ENDED: if( name == "Play") { SimpleAudioEngine::sharedEngine()->playBackgroundMusic("music/bgm.mp3", true); } else if( name == "Pause") { SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic(); } else if( name == "Effect") { SimpleAudioEngine::sharedEngine()->playEffect("music/sound2.wav",false); } break; default: break; } }
相关文章推荐
- 实习小白::(转) Cocos2d-x 3.0开发(五)关联程序逻辑与cocoStudio导出文件
- Cocos2d-x 3.0开发(五)关联程序逻辑与cocoStudio导出文件
- Cocos2d-x 3.0开发(五)关联程序逻辑与cocoStudio导出文件
- CocoStudio基础教程(2)关联程序逻辑与cocoStudio导出文件
- Cocos2d-x 学习笔记–Cocos Studio UI加载
- Cocos2d-x 3.1.1 学习日志14--CocosStudio学习必看
- Cocos2d-x 3.1.1 学习日志14--CocosStudio学习必看
- Cocos2d-x 3.1.1 学习日志14--CocosStudio学习必看
- cocos2d-x+cocosbuilder 学习笔记 (二)
- 地球人己阻止不了程序猿们学习cocos2d-x了-学习笔记02
- cocos2d学习笔记(五)CCMenu与CocosDenshion
- 文件切割合并程序学习笔记
- 学习笔记之cocos2d-x2.1.1实现修改plist文件数据,用TinyXml解析XML
- 地球人己阻止不了程序猿们学习cocos2d-x了-学习笔记03
- 学习笔记之cocos2d-x2.1.1实现读取.plist文件(使用数组CCArray)
- cocos2d-x+cocosbuilder 学习笔记 (五)
- IOS cocos2d学习笔记-<八>游戏关卡(Objective-C文件读写)
- cocos2d-x+cocosbuilder 学习笔记 (一)
- cocos2d-x学习笔记——小心文件大小写
- cocos2d-x+cocosbuilder 学习笔记 (三)