CommandTrigger 事件触发器
触发器用于触发事件,总是绑定在场景对象身上的,并且由某个对象触发并由某个对象执行(即触发者和执行者)
触发器的主种类分为:场景的触发器、场景对象的触发器、界面控件的触发器、事件库触发器(独立)、独立事件片段触发器
支持同一时间内多个触发器同时执行事件
支持自定义触发器,比如场景的进入事件、界面控件的点击事件等
支持暂停执行事件以及暂停等待的时间推进
支持多线模式:不用等待该事件执行完毕也仍然可以再次执行该事件
支持接收玩家的自定义参数输入(如制作等待玩家输入名字、等待玩家输入密码、QTE等功能)
跨场景执行:部分触发器可以跨场景执行,并不会因为更换场景而终止,满足以下条件即可:
-- 触发者和执行者都是玩家的场景对象(如界面控件的点击事件)
读档后会恢复全部正在执行的事件(如读档前A事件执行到第3行,那么读档后A事件从第4行开始执行)
相关类:Command、CommandPage、CommandTrigger
维护人员:黑暗之神KDS
创建时间:2018-10-11
继承 无
子类 无
Public 属性
属性 |
---|
EVENT_START : string; 静态执行开始事件:当触发器开始执行时派发的一个事件(Event) |
EVENT_OVER : string; 静态执行结束事件:当触发器执行结束时派发的一个事件(Event) |
EVENT_BEHAVIOR_OVER : string; 静态该触发器此前派发的对象行为事件执行完毕时事件:(同指令中的等待行为结束) |
COMMAND_MAIN_TYPE_SCENE : number; 静态枚举-事件主类别:场景相关的事件类别 默认值=0 |
COMMAND_MAIN_TYPE_SCENE_OBJECT : number; 静态枚举-事件主类别:场景对象相关的事件类别 默认值=1 |
COMMAND_MAIN_TYPE_UI : number; 静态枚举-事件主类别:界面相关的事件类别 默认值=2 |
COMMAND_MAIN_TYPE_CALL_COMMON_EVENT : number; 静态枚举-事件主类别:独立的事件库事件的事件类别 默认值=3 |
COMMAND_MAIN_TYPE_FRAGMENT_EVENT : number; 静态枚举-事件主类别:片段事件的事件类别 默认值=4 |
id : number; 唯一ID,触发线(TriggerLineID)对应的就是触发器的ID |
mainType : number; 触发器主类型 对应CommandTrigger::COMMAND_MAIN_TYPE_XXXXX |
indexType : number; 触发器子类型 主类型下的子类型 |
from : any; 记录对应事件来源 |
multiline : boolean; 是否多线模式:表示该触发器是每次生成的一个新触发器,独立运行 |
scene : ClientScene; 所在的场景,此处一般指当前游戏场景 |
trigger : SceneObjectEntity; 触发事件的场景对象(事件触发者) |
executor : SceneObjectEntity; 执行事件的目标(事件执行者) |
pause : boolean; 暂停指令继续推进:暂停执行标记,表示事件暂时停止执行 |
delayPause : boolean; 是否暂停【等待】指令继续执行(在等待中也会暂停,而恢复后会等待剩余的时间/帧数) |
cmdReturn : boolean; 中断执行标记,表示事件指令该作用域中断了,返回到上一层作用域继续执行(如若已经是顶层则事件指令执行完毕) |
inputMessage : any; 玩家提交输入值 默认值= |
triggerPlayer : Player; 只读获取触发事件的玩家,单机版只有当前的唯一玩家 |
hasBehavior : boolean; 只读该触发器是否还有派发出去仍未执行完毕的行为 |
Public 方法
方法 |
---|
offset(value : number): void 偏移指令行 |
waitFrame(frame : number): void 等待指定帧数后继续执行指令 |
waitTime(time : number): void 等待指定时间后继续执行 |
addBehavior(targetSo : SceneObjectEntity, behaviorData : any, loop : boolean, targetSceneObject : SceneObject, cover : boolean, startIndex? : number, Immediate? : boolean, forceStopLastBehavior? : boolean, delayFrame? : number, executor? : SceneObjectEntity): void 添加对象行为组 |
addCommonEventCommandPageLayer(commonEventID : number): void 调用事件库事件时追加层级,在当前的触发器中追加执行指定的事件库的事件,在事件库事件执行完毕后会回到原来的事件中继续接着执行 |
addFragmentEventCommandPageLayer(feData : string): void 追加片段事件层级,在当前的触发器中追加执行片段事件,在该片段事件执行完毕后会回到原来的事件中继续接着执行 |
详情
EVENT_START
EVENT_START : string;
静态执行开始事件:当触发器开始执行时派发的一个事件(Event)
// trigger = CommandTrigger 触发器
EventUtils.addEventListenerFunction(trigger, CommandTrigger.EVENT_START, ()=>{
// to do
}, this);
EVENT_OVER
EVENT_OVER : string;
静态执行结束事件:当触发器执行结束时派发的一个事件(Event)
// trigger = CommandTrigger 触发器
EventUtils.addEventListenerFunction(trigger, CommandTrigger.EVENT_OVER, ()=>{
// to do
}, this);
EVENT_BEHAVIOR_OVER
EVENT_BEHAVIOR_OVER : string;
静态该触发器此前派发的对象行为事件执行完毕时事件:(同指令中的等待行为结束)
// trigger = CommandTrigger 触发器
EventUtils.addEventListenerFunction(trigger, CommandTrigger.EVENT_BEHAVIOR_OVER, ()=>{
// to do
}, this);
mainType
mainType : number;
触发器主类型 对应CommandTrigger::COMMAND_MAIN_TYPE_XXXXX
如:这是一个场景对象相关的事件
indexType
indexType : number;
触发器子类型 主类型下的子类型
如:这是一个场景对象的“点击事件”
from
from : any;
记录对应事件来源
0-场景:无
1-场景对象:对象index
2-界面:sid唯一随机ID
3-事件库:事件库事件的ID
4-事件页片段:sid唯一随机ID
multiline
multiline : boolean;
是否多线模式:表示该触发器是每次生成的一个新触发器,独立运行
比如:界面中控件的点击事件是一个每次点击都会执行一个循环事件-在10秒内每秒增加1号数值变量20点,
则玩家点击N次,每次事件需要10秒才能执行结束。
如果开启了多线模式:无需等待上一个10秒事件,启动一个新的10秒事件(会同时执行)
如果关闭了多线模式:需要等待上一个10秒事件执行完毕,才能生效,否则此次点击忽略。
trigger
trigger : SceneObjectEntity;
触发事件的场景对象(事件触发者)
如RPG游戏中,玩家点击NPC时,玩家的场景对象是触发者
executor
executor : SceneObjectEntity;
执行事件的目标(事件执行者)
如RPG游戏中,玩家点击NPC时,NPC是执行者
pause
pause : boolean;
暂停指令继续推进:暂停执行标记,表示事件暂时停止执行
同时指令停止了指令的索引推进,停留在当前行,如果继续执行的话,仍然是当前行指令执行,
所以一般情况下可以调用offset方法偏移指令行,也可以通过玩家提交输入的信息来区分同一个指令下的不同状态
delayPause
delayPause : boolean;
是否暂停【等待】指令继续执行(在等待中也会暂停,而恢复后会等待剩余的时间/帧数)
一般用于制作需要主动暂停某些事件,比如RPG模板中场景中的某些事件遇到Game.pause时暂停了,
以便打开战斗场景进入“另一个空间”战斗结束后恢复暂停。
cmdReturn
cmdReturn : boolean;
中断执行标记,表示事件指令该作用域中断了,返回到上一层作用域继续执行(如若已经是顶层则事件指令执行完毕)
如系统指令-中断指令执行则设置该参数为true,表示当前层的事件后续不再执行
inputMessage
inputMessage : any;
玩家提交输入值 默认值=
一般配合系统指令-等待玩家输入一并使用(当然自定义的等待同样有效)
客户端通过GameCommand的inputMessageAndContinueExecute方法来提交玩家的输入信息
比如制作等待玩家鼠标点击屏幕,然后通过提交鼠标位置信息给事件接收,以便获取信息后执行逻辑
triggerPlayer
triggerPlayer : Player;
只读获取触发事件的玩家,单机版只有当前的唯一玩家
@return Player
hasBehavior
hasBehavior : boolean;
只读该触发器是否还有派发出去仍未执行完毕的行为
一个触发器可以同时派发多个对象行为事件,比如让A执行123,让B执行456,
当所有派发出去的行为执行完毕后该属性才返回false(或者当前没有派发任何对象行为的事件)。
offset
offset(value : number): void :
偏移指令行
参数
value 偏移量时
waitFrame
waitFrame(frame : number): void :
等待指定帧数后继续执行指令
参数
frame 等待的帧数
waitTime
waitTime(time : number): void :
等待指定时间后继续执行
参数
time 等待的时间,单位:毫秒
addBehavior
addBehavior(targetSo : SceneObjectEntity, behaviorData : any, loop : boolean, targetSceneObject : SceneObject, cover : boolean, startIndex? : number, Immediate? : boolean, forceStopLastBehavior? : boolean, delayFrame? : number, executor? : SceneObjectEntity): void :
添加对象行为组
对象身上每次添加对象行为组时都会新增一层行为,只有当这一层执行完毕后才会回到上一层继续执行
比如A对象默认行为是123,在执行完1时添加了新的行为组456,此时执行完456后回到第一层继续执行23,所以总顺序应是:1-4-5-6-2-3
参数
targetSo 目标对象(行为执行者)
behaviorData 行为数据 [[行为1-ID,参数1,参数2],[行为2-ID,参数1,参数2],....],由于行为是自定义的,具体行为的作用请参考游戏的模板高级制作者可以在:GameCreator编辑器菜单-自定义编辑器-自定义行为中配合脚本来编辑行为,
loop 是否循环,一旦循环执行则会无限在该层循环,除非再添加一层新的行为组
targetSceneObject 事件触发者
cover 是否覆盖,一旦覆盖则将此前的行为组清空(连同其默认的行为)
startIndex [可选] 默认值=0 该行为组的开始播放的行为索引,默认0,表示从最开头开始播放
Immediate [可选] 默认值=true 是否立即刷新,否则会等待下一帧才刷新
forceStopLastBehavior [可选] 默认值=false 是否强制停止正在执行的行为,由项目层实现,以便当前行为组能够立即执行
delayFrame [可选] 默认值=0 行为内部的需要等待的帧数
executor [可选] 默认值=null 执行事件者(也是行为派发者)
addCommonEventCommandPageLayer
addCommonEventCommandPageLayer(commonEventID : number): void :
调用事件库事件时追加层级,在当前的触发器中追加执行指定的事件库的事件,在事件库事件执行完毕后会回到原来的事件中继续接着执行
一般用于在指令执行中追加调用事件库的事件
参数
commonEventID 事件库的事件ID
addFragmentEventCommandPageLayer
addFragmentEventCommandPageLayer(feData : string): void :
追加片段事件层级,在当前的触发器中追加执行片段事件,在该片段事件执行完毕后会回到原来的事件中继续接着执行
一般用于在指令执行中追加事件片段
参数
feData 片段事件数据