cocos2d-x CocoStudio中场景触发器(Trigger)的使用和扩展
场景编辑器中的触发器是一种通过事件触发机制,在特定的事件被触发的时候自动执行自己预先定义的动作或者功能。
编辑器中带有一些默认的事件、条件和动作,当然也可以扩展自定义的事件、条件和动作。
触发器可以创建多个,每个触发器都有可以设置自己的:事件、条件、动作。
事件:
是指触发监听的条件,在程序代码中,我们要在希望开启触发监听的地方用sendEvent(事件ID)来启动事件监听,这时候才会检测“条件”是否满足。
默认包含8种事件,分别是SceneOnEnter、SceneOnExit、SceneInit、SceneUpdate;TouchBegan、TouchMoved、TouchEnded、TouchCancelled。
条件:
用来判断触发当前事件时是否执行预订的动作。只有当条件成立的时候才会继续执行预订的动作。当不包含任何条件的时候,动作会被直接触发。
当包含多个条件的时候,条件之间的关系为并,只有当所有的条件都是符合的时候才能够执行预订的动作。
默认提供了TimeElapsedTo、ActionState、IsNodeInRect、IsNodeVisible四种条件,分别对应四个类来检测条件是否满足。
动作:
当触发当前触发器且条件都成立的情况下,要执行的动作。
默认提供了PlayMusic、MoveTo、MoveBy、RotateTo、RotateBy、 ScaleTo、ScaleBy、SkewTo、SkewBy、TriggerState、ArmaturePlayAction12种默认动作。
条件和动作都带有属性窗口,在属性里可以设置参数,在代码中可以拿到这些设置过的参数以便处理。
当我们设置好触发器后,点击生成,则会根据当前触发器配置生成代码文件放在Code文件夹内,您可以将这些代码文件直接加入您的项目工程:

最后在确定,保存当前触发器配置。
下面重点讲解:触发器的扩展
要添加自己的触发器,那么就需要按照已有触发器的模板来写自己的触发器,模板在CocoStudio项目目录下CocoStudio\Samples\Trigger\TriggerXML,
这里是所有触发器的定义,xml文件格式:

事件:Event.xml
<?xmlversion="1.0" encoding="utf-8"?>
<RootType="Scene">
<EventList>
<Event ClassName="EnterScene"Name="SceneOnEnter"/>
<Event ClassName="LeaveScene"Name="SceneOnExit"/>
<EventClassName="InitScene" Name="SceneInit"/>
<EventClassName="UpdateScene" Name="SceneUpdate"/>
<EventClassName="TouchBegan" Name="TouchBegan"/>
<EventClassName="TouchMoved" Name="TouchMoved"/>
<EventClassName="TouchEnded" Name="TouchEnded"/>
<Event ClassName="TouchCancelled" Name="TouchCancelled"/>
</EventList>
</Root>
EventList就是事件列表,每一行是一个独立的事件,其中ClassName属性是在程序中使用的名称,给sendEvent(事件名称)用的,Name是显示在编辑器中的列表。
扩展添加自己的事件:
<Event ClassName="MyEvent" Name="MyEvent"/>
条件:Condition.xml
<?xmlversion="1.0" encoding="utf-8"?>
<RootType="Scene">
<ConditionList>
<Condition ClassName="TimeElapsed" Name="TimeElapsedTo"/>
<Condition ClassName="ArmatureActionState" Name="ActionState"/>
<Condition ClassName="NodeInRect" Name="IsNodeInRect"/>
<Condition ClassName="NodeVisible" Name="IsNodeVisible"/>
</ConditionList>
</Root>
扩展添加自己的条件;
<Condition ClassName="MyCondition" Name="MyCondition"/>
我们知道条件是有属性的,所以这里边的每一个ClassName都对应一个扩充文件,在Condition文件夹下:

我们如果添加自己的条件,不要忘了扩充。
ArmatureActionState.xml:
<?xmlversion="1.0" standalone="yes" ?>
<Root>
<Item Type="NodeTag" Name="NodeTag" CHName="渲染节点标签" Key = "Tag" Default="10000" />
<Item Type="TextBox"Name="ComName" Key ="componentName" Default="CCArmature" />
<Item Type="TextBox"Name="AniName" Key ="AnimationName" Default="run" />
<Item Type="ComboBox"Name="ActionState" Key = "ActionType"Default="0">
<Childes>
<Child Name="START"ID="0"/>
<Child Name="COMPLETE"ID="1"/>
<Child Name="LOOP_COMPLETE" ID="2"/>
</Childes>
</Item>
</Root>
Root标签下是属性状态数组,每个Item是一个属性状态。 属性中Type表示类型,Name是编辑器中显示的属性名,Key是用于用户输入的属性值的索引,通过它在程序中找到用户填入的值,Default代表Key的默认值。
有一点要说明,如果想要显示中文属性名,需要添加:CHName="目标Id"
<Item Type="NodeTag" Name="NodeTag" CHName="渲染节点标签" Key = "Tag" Default="10000" />
我们可以添加一条Item属性,获取我们想要的用户输入的数据。
Type通用的有IntegerUpDown、DoubleUpDown、TextBox、ComboBox四种种类型。其中IntegerUpDown、DoubleUpDown表示整数型值和双精度小数的素质,可以手动输入数字。TextBox表示文本型,可以接收一个字符串。ComboBox表示下拉列表型,提供预设值。
<ItemType="ComboBox" Name="ActionState" Key ="ActionType" Default="0">
<Childes>
<Child Name="START"ID="0"/>
<Child Name="COMPLETE"ID="1"/>
<Child Name="LOOP_COMPLETE" ID="2"/>
</Childes>
</Item>
该Item是一个下拉列表,包含一个元素表,每个元素均包含一个Name和 一个ID。ID是提供给程序使用的,就是用户的选择项。
动作:Action.xml
<?xml version="1.0" encoding="utf-8"?>
<Root Type="Scene">
<ActionList>
<Action ClassName="PlayMusic" Name="PlayMusic" CHName="播放音乐(PlayMusic)"/>
<Action ClassName="TMoveTo" Name="MoveTo" CHName="移动到(MoveTo)"/>
<Action ClassName="TMoveBy" Name="MoveBy" CHName="移动(MoveBy)"/>
<Action ClassName="TRotateTo" Name="RotateTo" CHName="旋转到(RotateTo)"/>
<Action ClassName="TRotateBy" Name="RotateBy" CHName="旋转(RotateBy)"/>
<Action ClassName="TScaleTo" Name="ScaleTo" CHName="缩放到(ScaleTo)"/>
<Action ClassName="TScaleBy" Name="ScaleBy" CHName="缩放(ScaleBy)"/>
<Action ClassName="TSkewTo" Name="SkewTo" CHName="歪曲到(SkewTo)"/>
<Action ClassName="TSkewBy" Name="SkewBy" CHName="歪曲(SkewBy)"/>
<Action ClassName="ArmaturePlayAction" Name="ArmaturePlayAction" CHName="骨骼播放动画(ArmaturePlayAction)"/>
<Action ClassName="SequenceMoveTo" Name="SequenceMoveTo" CHName="序列移动到(SequenceMoveTo)"/>
<Action ClassName="JumpAction" Name="JumpAction" CHName="向上跳并旋转动作(JumpAction)"/>
<Action ClassName="FallAction" Name="FallAction" CHName="向下坠并旋转动作(FallAction)"/>
<Action ClassName="ChangeDoubleAttribute" Name="ChangeDoubleAttribute" CHName="改变Double自定义属性(ChangeDoubleAttribute)"/>
<Action ClassName="AddAccToPositionY" Name="AddAccToPositionY" CHName="增加加速度在Y坐标(AddAccToPositionY)"/>
<Action ClassName="SequenceMoveToAndChangePositionY" Name="SequenceMoveToAndChangePositionY" CHName="序列移动同时Y坐标随机(SequenceMoveToAndChangePositionY)"/>
<Action ClassName="SetNodeVisible" Name="SetNodeVisible" CHName="设置节点隐藏显示(SetNodeVisible)"/>
<Action ClassName="PlayUIAnimation" Name="PlayUIAnimation" CHName="播放UI动画"/>
<Action ClassName="StopAllActions" Name="StopAllActions" CHName="停止所有动画"/>
<Action ClassName="TriggerState" Name="TriggerState" CHName="触发器状态(TriggerState)"/>
</ActionList>
</Root>
同样的,动作也有属性扩充,所以添加自己的动作的时候也要添加扩充文件,扩充文件主要是设置我们希望获取的属性:

在xml中配置的所有,都是直接用于编辑器显示的,当我们点击“生成”的时候,会生成程序代码,在代码中真正的对这触发器做响应处理。
这些类在如下文件中:

下一节介绍代码部分。
cocos2d-x CocoStudio中场景触发器(Trigger)的使用和扩展的更多相关文章
- cocos2d-x CocoStudio中场景触发器(Trigger)的代码部分和触发器之间的互调
这节继上一篇触发器扩展,讲一下代码部分的实现. 事件:EventDef.h 只有一个枚举,是对触发器事件的编号 #ifndef__EVENTDEF__ #define__EVENTDEF__ enum ...
- Quartz(自动任务)中的触发器Trigger
1.Quartz中的触发器TriggerJob 包含了要执行任务的逻辑,但是 Job 对何时该执行却一无所知.这个事情留给了 Trigger.Quartz Trigger 继承了抽象的 org.qua ...
- 数据库技术中的触发器(Trigger)——和ContentObserver功能类似
刚总结过ContentObserver的作用和特点,顺便总结下数据库技术中的触发器(Trigger),触 发 器 分 为 表 触 发 器 . 行 触 发 器
- 企业级任务调度框架Quartz(9) Quartz之作业触发器Trigger
前序: 我们已经大概对Quartz的基本有了一个大概的认识:现在我们将要逐渐对Quartz的各个重要组件进行学习:前面已经对job进行了详细讲解,现在我们来认识下它的一个重要兄弟,没有它,作 ...
- WPF中触发器Trigger、MultiTrigger、DataTrigger、MultiDataTrigger、EventTrigger几种
WPF中有种叫做触发器的东西(记住不是数据库的trigger哦).它的主要作用是根据trigger的不同条件来自动更改外观属性,或者执行动画等操作. WPFtrigger的主要类型有:Trigger. ...
- WPF触发器(Trigger)
WPF触发器(Trigger.DataTrigger.EventTrigger) WPF中有种叫做触发器的东西(记住不是数据库的trigger哦).它的主要作用是根据trigger的不同条件来自动更改 ...
- WPF触发器(Trigger、DataTrigger、EventTrigger)
WPF中有种叫做触发器的东西(记住不是数据库的trigger哦).它的主要作用是根据trigger的不同条件来自动更改外观属性,或者执行动画等操作. WPFtrigger的主要类型有:Trigger. ...
- MySQL 触发器trigger
一.触发器概念 触发器(trigger):监视某种情况,并触发某种操作. 触发器创建语法四要素:1.监视地点(table) 2.监视事件(insert/update/delete) 3.触发时间(af ...
- mysql之触发器trigger
触发器(trigger):监视某种情况,并触发某种操作. 触发器创建语法四要素:1.监视地点(table) 2.监视事件(insert/update/delete) 3.触发时间(after/befo ...
随机推荐
- 第一次做的struts2与spring整合
参考:http://www.cnblogs.com/S-E-P/archive/2012/01/18/2325253.html 这篇文章说的关键就是“除了导入Struts2和Spring的核心库之外, ...
- java读写中文文件
在用Java程序进行读写含中文的txt文件时,经常会出现读出或写入的内容会出现乱码.原因其实很简单,就是系统的编码和程序的编码采用了不同的编码格式.通常,假如自己不修改的话,windows自身采用的编 ...
- 卷积神经网络和CIFAR-10:Yann LeCun专访 Convolutional Nets and CIFAR-10: An Interview with Yann LeCun
Recently Kaggle hosted a competition on the CIFAR-10 dataset. The CIFAR-10 dataset consists of 60k 3 ...
- Getting Started with Mongoose and Node.js – A Sample Comments System | Dev Notes
In this post, we’re going to be creating a sample comments system using Node, Express and Mongoose. ...
- 大型web系统架构详解
(如果感觉有帮助,请帮忙点推荐,添加关注,谢谢!你的支持是我不断更新文章的动力.本博客会逐步推出一系列的关于大型网站架构.分布式应用.设计模式.架构模式等方面的系列文章) 动态应用,是相对于网站静态内 ...
- YTU 2602: 熟悉题型——类设计( 矩形类定义【C++】)
2602: 熟悉题型--类设计( 矩形类定义[C++]) 时间限制: 1 Sec 内存限制: 128 MB 提交: 183 解决: 119 题目描述 定义一个矩形类,数据成员包括左下角和右上角坐标 ...
- BZOJ 3224 普通平衡树(树状数组)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=3224 题意:维护以下操作:(1)插入x:(2)删除x(若有多个相同的数,只删除一个)(3 ...
- sgu 495. Kids and Prizes (简单概率dp 正推求期望)
题目链接 495. Kids and Prizes Time limit per test: 0.25 second(s)Memory limit: 262144 kilobytes input: s ...
- golang 常用网址收藏
1:beego 模板语法指南:http://blog.go-china.org/03-beego-template 2:go 语言sublimetext2配置:http://www.kankanews ...
- aop郁闷错误
很郁闷的错误,终于解决了: <aop:config> <aop:aspect ref="log"> <aop:pointcut id=" ...