cocos2d-x CocoStudio中场景触发器(Trigger)的代码部分和触发器之间的互调
这节继上一篇触发器扩展,讲一下代码部分的实现。
事件:EventDef.h
只有一个枚举,是对触发器事件的编号
#ifndef__EVENTDEF__
#define__EVENTDEF__ enum { TRIGGEREVENT_ENTERSCENE = ,
TRIGGEREVENT_LEAVESCENE,
TRIGGEREVENT_INITSCENE,
TRIGGEREVENT_UPDATESCENE,
TRIGGEREVENT_TOUCHBEGAN,
TRIGGEREVENT_TOUCHMOVED,
TRIGGEREVENT_TOUCHENDED,
TRIGGEREVENT_TOUCHCANCELLED,
}; #endif
在程序中使用sendEvent方法,就将cocos2d-x引擎的事件引入到了触发器系统中了 :
boolHelloWorld::ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent)
{
sendEvent(TRIGGEREVENT_TOUCHBEGAN);
return true;
}
条件:cons.h 和 cons.cpp
以ArmatureActionState为例:
ArmatureActionState.h
class ArmatureActionState : public cocos2d::extension::BaseTriggerCondition
{
DECLARE_CLASS_INFO
public:
ArmatureActionState(void);//构造方法
virtual ~ArmatureActionState(void);//析构方法 virtual bool init();//初始化方法
virtual bool detect();//获取判断判断结果接口****关键点****
virtual void serialize(constrapidjson::Value &val);//序列化,用于获取编辑器中设置的条件值
virtual void removeAll();//清理当前条件 void animationEvent(cocos2d::extension::CCArmature*armature, cocos2d::extension::MovementEventType movementType, const char*movementID);
private:
int _nTag;
std::string _comName;
std::string _aniname;
int _nState;
bool _bSuc;
};
ArmatureActionState.cpp
void ArmatureActionState::serialize(const rapidjson::Value &val)
{
int count =DICTOOL->getArrayCount_json(val, "dataitems");
for (int i = ; i < count; ++i)
{
const rapidjson::Value&subDict = DICTOOL->getSubDictionary_json(val, "dataitems",i);
std::string key =DICTOOL->getStringValue_json(subDict, "key");
if (key == "Tag")
{
_nTag =DICTOOL->getIntValue_json(subDict, "value");
continue;
}
else if (key =="componentName")
{
_comName =DICTOOL->getStringValue_json(subDict, "value");
continue;
}
else if (key =="AnimationName")
{
_aniname =DICTOOL->getStringValue_json(subDict, "value");
continue;
}
else if (key =="ActionType")
{
_nState =DICTOOL->getIntValue_json(subDict, "value");
continue;
}
}
}
其中的判断条件值elseif (key == "componentName")就对应的前面提的配置文件中的Key,这里通过key来做判断,得到我们想要的值value。
动作:act.h 和 act.cpp
以TMoveTo为例:
和“条件判断”的实现多数方法也是类似,但不同的是detect()替换为done()函数,在该函数里,我们做触发事件后的处理。
void TMoveTo::done()
{
do
{
CCNode*pNode = SceneReader::sharedSceneReader()->getNodeByTag(_nTag);
CC_BREAK_IF(pNode== NULL);
CCActionInterval* actionTo = CCMoveTo::create(_fDuration,_pos);
CC_BREAK_IF(actionTo== NULL);
pNode->runAction(actionTo);
}while (0);
}
最后,我们有时候可能会需要在某一个触发器结束的时候调用另一个触发器,那么我们只需要在当前触发器属性中添加一个“下一个触发器ID”的属性,用来获取下一个触发器。

同一场景中所有新建的触发器都会自动在名字末尾添加一个有序编号,那是触发器的编号ID,我们可以通过这个ID来取得指定的触发器。

void TMoveTo::done()
{
do
{
/* 调用另一个触发器,m_nextTriggerId为下一个触发器的ID */
TriggerObj *obj = TriggerMng::getInstance()->getTriggerObj(m_nextTriggerId);
obj->done();
}while ();
}
参考链接:http://www.cocoachina.com/bbs/simple/?t194739.html
cocos2d-x CocoStudio中场景触发器(Trigger)的代码部分和触发器之间的互调的更多相关文章
- ylb: 触发器(Trigger)之Instead Of触发器 [注:没内容]
ylbtech-SQL Server:SQL Server-触发器(Trigger)之Instead Of触发器 触发器(Trigger)之Instead Of触发器 [注:没内容]. ylb: 触发 ...
- cocos2d-x CocoStudio中场景触发器(Trigger)的使用和扩展
场景编辑器中的触发器是一种通过事件触发机制,在特定的事件被触发的时候自动执行自己预先定义的动作或者功能. 编辑器中带有一些默认的事件.条件和动作,当然也可以扩展自定义的事件.条件和动作. 触发器可以创 ...
- mysql 利用触发器(Trigger)让代码更简单
一,什么触发器 1,个人理解 触发器,从字面来理解,一触即发的一个器,简称触发器(哈哈,个人理解),举个例子吧,好比天黑了,你开灯了,你看到东西了.你放炮仗,点燃了,一会就炸了. 2,官方定义 触发器 ...
- 如何使用MySQL触发器trigger
阅读目录:触发器trigger的使用 创建触发器 单一执行语句.多执行语句 new.old详解 查看触发器 删除触发器:慎用触发器,不用就删除 Q:什么是触发器? A: 触发器是与表有关的数据库对象, ...
- WPF中触发器Trigger、MultiTrigger、DataTrigger、MultiDataTrigger、EventTrigger几种
WPF中有种叫做触发器的东西(记住不是数据库的trigger哦).它的主要作用是根据trigger的不同条件来自动更改外观属性,或者执行动画等操作. WPFtrigger的主要类型有:Trigger. ...
- Quartz(自动任务)中的触发器Trigger
1.Quartz中的触发器TriggerJob 包含了要执行任务的逻辑,但是 Job 对何时该执行却一无所知.这个事情留给了 Trigger.Quartz Trigger 继承了抽象的 org.qua ...
- 数据库技术中的触发器(Trigger)——和ContentObserver功能类似
刚总结过ContentObserver的作用和特点,顺便总结下数据库技术中的触发器(Trigger),触 发 器 分 为 表 触 发 器 . 行 触 发 器
- WPF触发器(Trigger)
WPF触发器(Trigger.DataTrigger.EventTrigger) WPF中有种叫做触发器的东西(记住不是数据库的trigger哦).它的主要作用是根据trigger的不同条件来自动更改 ...
- WPF触发器(Trigger、DataTrigger、EventTrigger)
WPF中有种叫做触发器的东西(记住不是数据库的trigger哦).它的主要作用是根据trigger的不同条件来自动更改外观属性,或者执行动画等操作. WPFtrigger的主要类型有:Trigger. ...
随机推荐
- CentOS查看内核版本,位数,版本号
1)[root@localhost ~]# cat /proc/version Linux version 2.6.18-194.el5 (mockbuild@builder10.CentOS.org ...
- Linux下 执行程序
看到有人问Linux下的./表示什么意思,我就趁机在这里写一下个人愚见: ./的意思是执行当前目录下的某可执行文件. . /相当于 source 根目录下的一个脚本.
- Java基础复习之一篇:关健字,标识符,注释,常量,进制转换,变量,数据类型,数据类型转换
1.关健字 1.1.被Java语言赋予特定意义的单词(如:class,interface,public ,static) 1.2.全部是小写 1.3.注意事项(goto和const作为关健字保留起来) ...
- wait、waitpid 僵尸进程 孤儿进程
man wait: NAME wait, waitpid, waitid - wait for process to change state SYNOPSIS #include <sys/ty ...
- 二叉搜索树的两种实现(数组模拟,STL)
书上实现: 二叉搜索数的特点:高效实现 插入一个数值,查询是否包含某个数值,删除某一个数值. 所有的节点都满足左子树上的所有节点都比自己的小,而右子树上的所有节点都比自己大的特点. 查询:如果当前数值 ...
- BZOJ 2351 Matrix(哈希)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2351 题意:给出一个n*m的01矩阵.再给出10个A*B的小01矩阵.判断这些小的矩阵是 ...
- json和jsonp的使用格式
最近一直在看关于json和jsonp的区别和各自的用法.优缺点! 下面是我看到过解释最清楚的一片文章 说到AJAX就会不可避免的面临两个问题,第一个是AJAX以何种格式来交换数据?第二个是跨域的需求 ...
- Android应用主界面底部菜单实现
介绍 现在绝大多数主流的应用主界面,都会包含一个底部菜单,就拿腾讯的QQ与微信来说,看起来是这样的 <---我是底部菜单 原理 在很久以前,可以通过TabActivity实现相关功能,自从Fr ...
- UVa 11093 Just Finish it up
从第一个加油站开始枚举起点,如果到第i个加油站油量不够的话,那么1~i个加油站都不可能是起点. 将第i+1个加油站作为起点继续枚举. 比如说,第一个加油站开始最多跑到第5个加油站,那么第二个加油站不可 ...
- UVa 1587 Box
题意:给出6个矩形的长和宽,问是否能够构成一个长方体 先假设一个例子 2 3 3 4 2 3 3 4 4 2 4 2 排序后 2 3 2 3 3 4 3 4 4 2 4 2 如果要构成一个长方体的话, ...