【Cocos2d-x v3.2+Cocos Studio1.6】实现一个简单的uibutton点击功能

前端之家收集整理的这篇文章主要介绍了【Cocos2d-x v3.2+Cocos Studio1.6】实现一个简单的uibutton点击功能前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

使用Cocos Studio能够非常方便地设计游戏的一些界面,并导入到Cocos2d-x中。本文讲解如何基于Cocos Stusio 1.6和Cocos2d-x v3.2来实现一个简单的uibutton点击功能


首先我们打开Cocos Studio1.6,选择UIEditor,进去后我们发现有很多的示例,选中一个叫demologin的示例:

选择好后我们发现如下图,简单介绍了下功能

这里我们选中那个login按钮,发现这个按钮的实例名叫login_Button,这个名字我们等会代码里要用,然后我们保存一下。

在保存路径下找到这个工程文件夹,打开

有这些文件,我们把Json和Resources文件夹下的资源复制到Cocos2d-x中的资源文件夹中。

这个json文件就是记录了这个widget的各种数据,Cocos2d-x会解析这些数据然后还原这个界面,感兴趣的可以打开研究下。

好了到了代码阶段,我就简单的创建了个helloworld,但是我们要把三个外部的工程库导入这个解决方案并引用并在头文件中包含。

好了,下面就是代码

1
2
3
4
5
6
7
8
9
10
11
@H_301_64@ 12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
//HelloWorldScene.h
#ifndef__HELLOWORLD_SCENE_H__
#define__HELLOWORLD_SCENE_H__
#include"cocos2d.h"
//导入这三个头文件
//注意在这个工程的属性->C\C++->常规->附加包含目录中添加这三个文件的路径
#include"cocostudio/CocoStudio.h"
#include"extensions/cocos-ext.h"
#include"ui/CocosGUI.h"
class HelloWorld: public cocos2d::Layer
{
:
//there'sno'id'incpp,sowerecommendreturningtheclassinstancepointer
static cocos2d::Scene*createScene();
//Here'sadifference.Method'init'incocos2d-xreturnsbool,insteadofreturning'id'incocos2d-iphone
virtual bool init();
//aselectorcallback
void menuCloseCallback(cocos2d::Ref*pSender,cocos2d::ui::TouchEventTypetype);
//implementthe"staticcreate()"methodmanually
CREATE_FUNC(HelloWorld);
};
#endif//__HELLOWORLD_SCENE_H__
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
//HelloWorldScene.cpp
#include"HelloWorldScene.h"
USING_NS_CC;
//这个是命名空间
using namespace cocostudio;
ui;
Scene*HelloWorld::createScene()
{
//'scene'isanautoreleaSEObject
autoscene=Scene::create();
//'layer'isanautoreleaSEObject
autolayer=HelloWorld::create();
//addlayerasachildtoscene
scene->addChild(layer);
//returnthescene
return scene;
}
//on"init"youneedtoinitializeyourinstance
HelloWorld::init()
{
//////////////////////////////
//1.superinitfirst
if (!Layer::init())
{
return false ;
}
SizevisibleSize=Director::getInstance()->getVisibleSize();
Vec2origin=Director::getInstance()->getVisibleOrigin();
//获取我们的CocosStudioUIdemo
//这里我们创建了一个widget,这里说明下貌似cocostudio有自己的一套代码风格和api
//有些功能能和cocos2dx混合着用
@H_676_502@ //这里的widget有点类似一个layer,反正我是这样理解的
ui::Widget*pNode=cocostudio::GUIReader::getInstance()->widgetFromJsonFile( "DemoLogin.json" );
this ->addChild(pNode);
//我们从widget中找到那个button的名字然后实例出来(跟android有点像)
ui::Button*button=(ui::Button*)ui::Helper::seekWidgetByName(pNode, "login_Button" );
//给这个按钮增加一个touch的侦听(这边就和cocos2dx有不同了)
button->addTouchEventListener( ,toucheventselector(HelloWorld::menuCloseCallback));
true ;
}
//这里是侦听回调函数
HelloWorld::menuCloseCallback(cocos2d::Ref*pSender,ui::TouchEventTypetype)
{
//cocostudio的侦听,你可以根据type的类型来执行相应的代码
//这里用switch来判断,非常的简洁明了
switch (type)
{
case ui::TouchEventType::TOUCH_EVENT_BEGAN:
{
log ( "touchbegan" );
break ;
}
ui::TouchEventType::TOUCH_EVENT_MOVED:
{
"touchmoved" );
;
}
ui::TouchEventType::TOUCH_EVENT_ENDED:
{
"touchended" );
;
}
ui::TouchEventType::TOUCH_EVENT_CANCELED:
{
"touchcanceled" );
;
}
default :
;
}
}

运行

点击按钮测试下

好的,完成。


来源网址:http://www.jb51.cc/article/p-tvjfnwwd-bbe.html

猜你在找的Cocos2d-x相关文章