文档章节

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

piggybear
 piggybear
发布于 2015/02/16 10:27
字数 885
阅读 16
收藏 0
点赞 0
评论 0

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


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

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

1413346152264622.jpg

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

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

1413346623934966.jpg

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

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

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

好了,下面就是代码了

1
2
3
4
5
6
7
8
9
10
11
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
{
public :
     // there's no 'id' in cpp, so we recommend returning the class instance pointer
     static  cocos2d::Scene* createScene();
 
     // Here's a difference. Method 'init' in cocos2d-x returns bool, instead of returning 'id' in cocos2d-iphone
     virtual  bool  init();  
     
     // a selector callback
     void  menuCloseCallback(cocos2d::Ref* pSender,cocos2d::ui::TouchEventType type);
     
     // implement the "static create()" method manually
     CREATE_FUNC(HelloWorld);
};
 
#endif // __HELLOWORLD_SCENE_H__
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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;
using  namespace  ui;
 
Scene* HelloWorld::createScene()
{
     // 'scene' is an autorelease object
     auto scene = Scene::create();
     
     // 'layer' is an autorelease object
     auto layer = HelloWorld::create();
 
     // add layer as a child to scene
     scene->addChild(layer);
 
     // return the scene
     return  scene;
}
 
// on "init" you need to initialize your instance
bool  HelloWorld::init()
{
     //////////////////////////////
     // 1. super init first
     if  ( !Layer::init() )
     {
         return  false ;
     }
     
     Size visibleSize = Director::getInstance()->getVisibleSize();
     Vec2 origin = Director::getInstance()->getVisibleOrigin();
 
     //获取我们的Cocos Studio   UIdemo
     //这里我们创建了一个widget,这里说明下貌似cocostudio有自己的一套代码风格和api
     //有些功能能和cocos2dx混合着用
     //这里的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( this ,toucheventselector(HelloWorld::menuCloseCallback));
 
     
     return  true ;
}
 
//这里是侦听回调函数
void  HelloWorld::menuCloseCallback(cocos2d::Ref* pSender,ui::TouchEventType type)
{
     //cocostudio的侦听,你可以根据type的类型来执行相应的代码
     //这里用switch来判断,非常的简洁明了
     switch  (type)
     {
     case  ui::TouchEventType::TOUCH_EVENT_BEGAN:
         {
             log ( "touch began" );
             break ;
         }
     case  ui::TouchEventType::TOUCH_EVENT_MOVED:
         {
             log ( "touch moved" );
             break ;
         }
     case  ui::TouchEventType::TOUCH_EVENT_ENDED:
         {
             log ( "touch ended" );
             break ;
         }
     case  ui::TouchEventType::TOUCH_EVENT_CANCELED:
         {
             log ( "touch canceled" );
             break ;
         }
     default :
         break ;
     }
}

运行

1413346782279101.jpg

点击按钮测试下

1413346790156678.png

好的,完成。


来源网址:http://blog.csdn.net/u011373759/article/details/40074897

本文转载自:http://blog.csdn.net/aa294194253/article/details/40147729

共有 人打赏支持
piggybear
粉丝 3
博文 237
码字总数 37552
作品 0
西安
技术主管
用UITextView撸一个顺畅的评论输入框

对比UITextField 继承关系: UITextField继承自UIControl,UITextView继承自UIScrollView; 输入行数 UITextView支持多行输入,可以滑屏垂直滚动,UITextField仅支持单行输入 Placeholder UI...

STzen
05/10
0
0
UIImageView与UIButton

应用场合 UIImageView主要用在只显示图片,没有点击事件的情况并且处理图片更加专业,动画例子: NSMutableArray *images = [NSMutableArray array]; for (int i=0; i<sum; i++) { NSBundle ...

天边那束阳光
2014/10/01
0
0
[iOS Animation]-CALayer 专用图层 富文本

富文本 iOS 6中,Apple给UILabel和其他UIKit文本视图添加了直接的属性化字符串的支持,应该说这是一个很方便的特性。不过事实上从iOS3.2开始CATextLayer就已经支持属性化字符串了。这样的话,...

浩浩老师
2015/09/23
0
0
用视图上移解决UITextField/UITextView被键盘遮盖问题

先看看UILabel/UITextField/UITextView的区别: UILabel 显示的文本只读,无法编辑,可以根据文字个数自动换行; UITextField 可编辑本文,但是无法换行,只能在一行显示;当点击键盘上的ret...

yoyoso
2015/03/18
0
0
UITextView控件的详细讲解

1.创建并初始化 创建UITextView的文件,并在.h文件中写入如下代码: [csharp]view plaincopy #import <UIKit/UIKit.h> @interface TextViewController : UIViewController <UITextViewDeleg......

meilidashijie
2013/01/07
0
0
IOS不用AutoLayout也能实现自动布局的类(2)----MyFrameLayout横空出世

下载地址: https://github.com/youngsoft/MyLinearLayout 我们知道,在IOS中我们要想进行视图的各方向的停靠,需要用到autoresizingMask,以及不停的计算应该停靠的位置,也就是计算frame中...

hejunbinlan
2015/08/19
0
0
4. 使用CLLocationManager获得设备当前经纬度信息

使用CLLocationManager获得设备当前经纬度信息 几乎所有的苹果设备都有GPS模块,通过GPS模块可以获得设备的当前位置信息,可以通过CLLocationManager和其代理类CLLocationManagerDelegate来获...

amaker.guo
2014/03/10
0
0
蛇和梯子游戏,分别用oc和swift开发

蛇和梯子游戏,分别用oc和swift开发 心血来潮想学学swift,看了一下教程和开发文档,发现其实swift的很多类都是基于oc的,比如swift的UIButton是基于oc的UIButton。所以我想其实学过oc再学s...

weixin_42012181
04/18
0
0
用基本控件简单地仿QQ登录界面

// Created by 妖精的尾巴 on 15-8-14. // Copyright (c) 2015年 妖精的尾巴. All rights reserved. // #import "ViewController.h" @interface ViewController () { UILabel backgroundLab......

不孤独的美食家
2015/08/14
0
0
iOS 如何解决无法将键盘隐藏

问题: 在一个父视图上添加了UITableView以及一个UITextView(UITextView为底部,其余为UITableView的布局)。当点击UITextView的时候,响应正常。当结束写入的时候,需要调用[UITextView res...

萨斯辈的呼唤
2014/10/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Spring Cloud Gateway 接口文档聚合实现

在微服务架构下,通常每个微服务都会使用Swagger来管理我们的接口文档,当微服务越来越多,接口查找管理无形中要浪费我们不少时间,毕竟懒是程序员的美德。 由于swagger2暂时不支持webflux 走...

冷冷gg
31分钟前
12
0
流利阅读笔记30-20180719待学习

1.今日导读 2.带着问题听讲解 3.新闻正文(中英文对照) 4.重点词汇 5.拓展内容

aibinxiao
33分钟前
1
0
OSChina 周五乱弹 —— 我们是食物链的最底层

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @温家成 :分享谢安琪的单曲《姿色份子》 《姿色份子》- 谢安琪 手机党少年们想听歌,请使劲儿戳(这里) @贪吃飒:最近p2p怎么了、半个月爆了...

小小编辑
46分钟前
6
1
Android Studio 3.0 之后打包apk出现应用未安装问题

1、废话 出现这个问题的原因,并不是只有一个,而是有多个原因,不懂的估计会被搞得一头雾水,下面我列举的是我遇到的几种问题和网友遇到的几种问题,但不一定是全部,也有可能有些莫名其妙的...

她叫我小渝
今天
0
0
前端基础

1. get请求传参长度的误区 误区:我们经常说get请求参数的大小存在限制,而post请求的参数大小是无限制的。 实际上HTTP 协议从未规定 GET/POST 的请求长度限制是多少。对get请求参数的限制是...

wenxingjun
今天
0
0
拦截SQLSERVER的SSL加密通道替换传输过程中的用户名密码实现运维审计(一)

工作准备 •一台SQLSERVER 2005/SQLSERVER 2008服务 •SQLSERVER jdbc驱动程序 •Java开发环境eclipse + jdk1.8 •java反编译工具JD-Core 反编译JDBC分析SQLSERVER客户端与服务器通信原理 SQ...

紅顏為君笑
今天
9
0
jQuery零基础入门——(六)修改DOM结构

《jQuery零基础入门》系列博文是在廖雪峰老师的博文基础上,可能补充了个人的理解和日常遇到的点,用我的理解表述出来,主干出处来自廖雪峰老师的技术分享。 在《零基础入门JavaScript》的时...

JandenMa
今天
0
0
linux mint 1.9 qq 安装

转: https://www.jianshu.com/p/cdc3d03c144d 1. 下载 qq 轻聊版,可在百度搜索后下载 QQ7.9Light.exe 2. 去wine的官网(https://wiki.winehq.org/Ubuntu) 安装 wine . 提醒网页可以切换成中...

Canaan_
今天
0
0
PHP后台运行命令并管理运行程序

php后台运行命令并管理后台运行程序 class ProcessModel{ private $pid; private $command; private $resultToFile = ''; public function __construct($cl=false){......

colin_86
今天
1
0
数据结构与算法4

在此程序中,HighArray类中的find()方法用数据项的值作为参数传递,它的返回值决定是否找到此数据项。 insert()方法向数组下一个空位置放置一个新的数据项。一个名为nElems的字段跟踪记录着...

沉迷于编程的小菜菜
今天
1
1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部