1、概述

上篇说到将CocoStudio的导出文件在程序中运行出来,但是并没有用户交互,即点击响应,程序的逻辑判断也都没有。这篇中我们把它们加进去,这样就可以算一个完整的程序了。

2、界面编辑

大部分界面编辑都在CocoStudio中完成,现在我们要做的工作是将所需要交互控件的Tag记下来,这样我们可以通过Tag找到这个控件。将Tag整理后我将其记录到一个.h文件中这样在工程中就可以使用了,例如:

const int UI_BUTTON_CLEAR = ;
const int UI_BUTTON_START = ;
const int UI_SLIDER_SPEED = ;
const int UI_LOADINGBAR_LOADING = ;
const int UI_LABELATLAS_LIFENUM = ;

3、程序关联

关联的核心在于设置响应函数、读取与改变控件状态。

1、响应函数的设置

按钮是要有响应函数的,由于它是UIWidget的一个子类,所以采用的是TouchEvent的回调方式。

//定义
void touchButton(Object* obj,cocos2d::extension::TouchEventType eventType); //挂载
UIButton* startBtn = dynamic_cast<UIButton*>(m_layout->getChildByTag(UI_BUTTON_START));
startBtn->addTouchEventListener(this,toucheventselector(HelloWorld::touchButton)); UIButton* pauseBtn = dynamic_cast<UIButton*>(m_layout->getChildByTag(UI_BUTTON_CLEAR));
pauseBtn->addTouchEventListener(this,toucheventselector(HelloWorld::touchButton)); //实现
void HelloWorld::touchButton(Object* obj,TouchEventType eventType)
{
auto button = dynamic_cast<UIButton*>(obj);
int tag = button->getTag();
switch(eventType)
{
case TouchEventType::TOUCH_EVENT_ENDED:
if(tag == UI_BUTTON_START)
{
changeRunning();
}
else
{
clearRunning();
}
}
}

值得注意的是这个场景中有两个按钮,我们可以采用Tag来进行区分。

2、控件的读取与更改

对于进度条和数字,我们需要做的是读取它的状态,并对它进行改变。在这个例子中我们需要在schedule的回调函数中做。Schedule的相关知识比较简单,此处不做讨论,有兴趣的同学可查阅其他资料。

void HelloWorld::runningSchedule(float dt)
{
int speed = dynamic_cast<UISlider*>(m_layout->getChildByTag(UI_SLIDER_SPEED))->getPercent();
auto loadingBar = dynamic_cast<UILoadingBar*>(m_layout->getChildByTag(UI_LOADINGBAR_LOADING));
int prc = loadingBar->getPercent() + speed / ;
if(prc > )
{
prc = ;
}
loadingBar->setPercent(prc); auto numLabel = dynamic_cast<UILabelAtlas*>(m_layout->getChildByTag(UI_LABELATLAS_LIFENUM));
int num = atoi(numLabel->getStringValue());
num++;
char buff[];
sprintf_s(buff,"%d",num);
numLabel->setStringValue(buff); } void HelloWorld::clearRunning()
{
if(m_isRunning)
{
changeRunning();
} dynamic_cast<UILabelAtlas*>(m_layout->getChildByTag(UI_LABELATLAS_LIFENUM))->setStringValue("");
dynamic_cast<UILoadingBar*>(m_layout->getChildByTag(UI_LOADINGBAR_LOADING))->setPercent();
dynamic_cast<UISlider*>(m_layout->getChildByTag(UI_SLIDER_SPEED))->setPercent();
}
void HelloWorld::changeRunning()
{
if(m_isRunning)
{
//pause
this->unschedule(schedule_selector(HelloWorld::runningSchedule));
m_isRunning = false;
UIButton* button = dynamic_cast<UIButton*>(m_layout->getChildByTag(UI_BUTTON_START));
button->setTitleText("运行");
}
else
{
//start
this->schedule(schedule_selector(HelloWorld::runningSchedule));
m_isRunning = true;
UIButton* button = dynamic_cast<UIButton*>(m_layout->getChildByTag(UI_BUTTON_START));
button->setTitleText("暂停");
}
}

4、总结

通过建立一个Tag的索引表来找到UI中的控件资源,然后取到对其进行操作。这其中可能会有的问题是,如果多个UI控件被加载Tag可能会重复,大家要注意这点。希望cocoStudio在未来的版本中能够将Tag索引表导出成资源的.h文件。

CocoStudio基础教程(2)关联程序逻辑与cocoStudio导出文件的更多相关文章

  1. CocoStudio基础教程(3)在程序中处理cocoStudio导出动画

    1.概述 使用cocoStudio可以方便的制作动画,接下来的工作就是在我们的程序中使用制作的动画.这篇中,我将使用程序将两个动画连接起来 2.关联到项目 运行脚本创建我们的项目,将导出的动画.UI放 ...

  2. CocoStudio基础教程(5)使用CocoStudio场景编辑器关联组件

    1.概述 我们有了UI交互.有了动画人物.有了物理模拟,还差最后一步——将这些元素融合起来.这就要用到cocoStudio中的场景编辑器了.这次我们要将先前我们做过的所有东西都放到一个场景中去.这项工 ...

  3. CocoStudio基础教程(6)使用CocoStudio编辑帧事件并关联到程序

    1.概述 帧事件也是新加入的功能.这篇中我们将看到如何使用它.我们将上篇中制作的动画稍加修改. 2.用途与原理 首先介绍一下帧事件.正如其名:一个与帧相关联的事件. 为什么要这么做呢?首先没人想做一大 ...

  4. CocoStudio基础教程(1)创建UI并载入到程序中

    1.概述 CocoStudio的使用无疑是cocos2d-x 3.0的重要组成部分,接下来我们用它来创建一组UI,并将其读入到程序中显示出来.先上效果图: 2.导出 在导出之前,最好先创建一个新的工程 ...

  5. CocoStudio基础教程(4)骨骼动画的动态换肤

    1.概述 游戏中人物的状态会发生改变,而这种改变通常要通过局部的变化来表现出来.比如获得一件装备后人物形象的改变,或者战斗中武器.防具的损坏等.这些变化的实现就要通过动态换肤来实现. 2.运行到程序 ...

  6. jdeveloper基础教程(中文版)

    jdeveloper基础教程(中文版) 程序员的基础教程:菜鸟程序员

  7. Android程序开发0基础教程(一)

    程序猿学英语就上视觉英语网 Android程序开发0基础教程(一)   平台简单介绍   令人激动的Google手机操作系统平台-Android在2007年11月13日正式公布了,这是一个开放源码的操 ...

  8. 《有限元分析基础教程》(曾攀)笔记一-二维杆单元有限元程序(基于Python)

    曾攀老师的<有限元分析基础教程>第三章有二维杆单元的推导,并结合一个例题进行了解析解和基于Matlab的程序求解.但是我感觉书中的MATLAB代码有点罗嗦,而且一些实现方法也比较麻烦,比如 ...

  9. Python基础教程3——教你用Python做个简单的加密程序(还基础什么呀,直接来练习吧,带源码)

    因为发现基础教程我之前推荐的那个网站就已经很完善了,就不重复写了,所以本汪来一起做练习吧. 一.加密原理 记得当时我学c++的时候,学到输入输出流的时候,当时王老师就教我们写了一个小的加密程序,所以这 ...

随机推荐

  1. 如何远程断点调试本地localhost项目

    前言 对于一般开发网站的IDE自带的服务器是都跑在 localhost 地址上的.(如下图的asp.net) 而这种地址是只能在本机通过 localhost 或 127.0.0.1 地址访问到,而无法 ...

  2. Android--自动搜索提示

    一. 效果图 在Google或者百度搜索的时候,在输入关键词都会出现自动搜索的提示内容,类似如下的效果,输入b 则出现包含b的相关词条 二. 布局代码 <?xml version="1 ...

  3. .net 开发人员如何自处

    关于N家还是J家,谁家更阔绰有前途的问题,每年都要讨论一会,当然和各位兄弟在岗位上迷茫,不知位置在哪有关系,不过这个问题基本算是伪问题,这种东西放到更高的维度,真的什么都不是. 但是为什么J家好像是不 ...

  4. 百度地图整合功能分享修正版[ZMap.js] 实例源码!

    ZMap 功能说明 ZMap 是学习百度地图 api 接口,开发基本功能后整的一个脚本类,本类方法功能大多使用 prototype 原型 实现: 包含的功能有:轨迹回放,圈画区域可编辑,判断几个坐标是 ...

  5. FusionCharts的使用方法

    来源于:http://www.cnblogs.com/xuhongfei/archive/2013/04/12/3016882.html 今天统计价格变化规律的时候找到的一个很好的文档,很详细 一.简 ...

  6. iOS开发小技巧--字典和数组的中文输出

    一.在解析json数据的时候,得到的集合对象或者数组对象在用%@打印的时候回出现类似乱码的情况.如图: 在iOS中打印字典或者数组对象,系统会默认调用字典对象和数组对象的descriptionWith ...

  7. mysql中的if判断

    问题是这样的,有一张表(tb_class)专门保存班级的ID和班级的名字 另一张表是学生信息表(tb_stu),表中有一个字段叫classID,没有外键关联,现在要把 这张表刷新到另一个表tb_par ...

  8. HYSBZ - 2152 聪聪和可可

    Description 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(可是他们家只有一台电脑)……遇到这种问题,一般情况下石头剪刀布就好 ...

  9. ELF(Executable and Linkable Format)

    目录 . 引言 . ELF文件格式 . ELF格式分析工具 0. 引言 0x1: ELF文件类型 ELF文件标准里把系统中采用ELF格式的文件归为以下几类 . 可重定位文件(Relocatable F ...

  10. getchar() 和 scanf("%c")的区别

    getchar()和scanf("%c")的功能都是从STDIN读一个字符,单论功能两者没有区别. 但两者的返回值是有区别的: -------------------------- ...