Event

代码示例 事件

事件相关代码示例

监听等待完成事件

Stript.ts
// groupTriggerLineID 表示当前图像组所在的触发线
EventUtils.addEventListener(GameImage, GameImage.EVENT_PLAY_OVER, c = Callback.New((groupTriggerLineID: number) => {
    // 判定是不是我这条事件触发线
    if(groupTriggerLineID==trigger.id){
      // to do
    }
}, this));

代码示例:调用事件库

在事件中的脚本调事件库的事件:

Stript.ts
let cmdPage = Command.gameWorld.commonEventPages[公共事件编号];
if(cmdPage)trigger.commandScope.push({ cmdPage: cmdPage, index: 0, commonEventID: 公共事件编号, fragmentCommands: null })

在事件中调用独立公共事件:

Stript.ts
let cmdPage = Command.gameWorld.commonEventPages[公共事件编号];
let newFETrigger = new CommandTrigger(CommandTrigger.COMMAND_MAIN_TYPE_CALL_COMMON_EVENT, 公共事件编号, trigger.scene, trigger.trigger, true, trigger.executor); cmdPage.startTriggerEvent(newFETrigger, trigger.inputMessage);

其他地方调用独立公共事件:

如果是网络版则需要预先设置开启允许调用

Stript.ts
GameCommand.startCommonCommand(公共事件编号);

代码示例:场所移动

在事件中移动到指定的场景上:

Stript.ts
// 抛出系统事件
EventUtils.happen(triggerPlayer.sceneObject, Command.EVENT_SYSTEM_COMMAND_START, [2]);
// 移动场所
triggerPlayer.toScene(场景编号, 场景像素水平坐标, 场景像素垂直坐标);

代码示例:设置对象行为

在事件中追加对象的行为:

Stript.ts
// 让执行事件者执行行为
trigger.addBehavior(trigger.executor, behaviorData, loop, trigger.trigger, cover, 0, true);

代码示例:场景震动

Stript.ts
// 场景震动
GameFunction.shake(5,10);

代码示例:更改场景色调

Stript.ts
// 场景震动
GameFunction.tonal(150,0,0,0,20,1,1,1);

代码示例:镜头移动

镜头跳转到指定的场景位置(如像素坐标点500,500):

Stript.ts
// 先取消锁定目标,如果未锁定目标的话可以不调用此代码
Game.currentScene.camera.sceneObject = null;
// 再设置指定的位置
Game.currentScene.camera.viewPort.x = 500;
Game.currentScene.camera.viewPort.y = 500;

镜头绑定场景对象:

Stript.ts
// 镜头锁定当前场景中ID=1的场景对象(可优化先缓动到他坐标这里再锁定)
// 该绑定是实时跟随,如果想制作平滑跟随等效果可以不使用绑定镜头,而是自定义控制镜头坐标。
Game.currentScene.camera.sceneObject = Game.currentScene.sceneObjects[1];

代码示例:音频

播放背景音乐

Script.ts
GameAudio.playBGM("xxx.mp3");

播放背景音乐,带有渐入效果且音调为150%

Script.ts
//最后一个参数1.5表示150%音调,中间的true和1000表示1000毫秒渐入
GameAudio.playBGM("xxx.mp3",9999,true,1000,1.5);

播放环境音效

Script.ts
GameAudio.playBGS("xxx.mp3");

播放音效

Script.ts
GameAudio.playSE("xxx.mp3");

播放音效并绑定在场景对象上,以便镜头离场景对象越远则越小声

Script.ts
// 获取当前场景的3号场景对象(ClientSceneObject或其子类的实例)
let soc = Game.currentScene.sceneObjects[3] as ClientSceneObject;
GameAudio.playSE("xxx.mp3",1,1,soc);

修改全局音效音量

Script.ts
// 全局音效的音量设置为50%音量
GameAduio.seVolume = 0.5;

代码示例:界面

关于系统组界面

系统组界面是指通过事件或者使用脚本(GameUI.show)打开的界面,是记录在系统预设组中,具有唯一性,且可以通过界面的ID管理该界面。

底层实现则是将这些创建出来的界面存在一个数组中,以ID作为索引,以便操作指定ID的界面能够找到该界面。

创建界面(系统组)

Script.ts
// 创建3号界面(使用GameUI.load方法获得的是基类,这里类型转化一下,
// 3号界面默认是由系统自动生成的GUI_3,你也可以绑定一个界面类继承于GUI_3)
let ui:GUI_3 = GameUI.load(3) as any;
// 添加到界面层
Game.layer.uiLayer.addChild(ui);
// 通过GameUI.show直接显示系统组界面(会被添加到Game.layer.uiLayer上,该方法同上面两行代码是一样的效果)
let ui:GUI_3 = GameUI.show(3) as any;

创建界面(非系统组)

Script.ts
// 使用GameUI方式创建(克隆模式)
let ui:GUI_3 = GameUI.load(3,true) as any;
// 直接新建,GUI_3是系统自动生成的界面类
let ui = new GUI_3();

访问界面的控件

界面自动创建的类会根据控件的名称自动创建该变量以便直接访问控件。

如果界面控件重名的话那么只记录其中一个靠前的,但是你可以通过API来操作获取所有指定名字的子显示对象。

Script.ts
// 比如3号界面有一个名字为btn的按钮,那么可以这样直接访问。
let ui = new GUI_3;
ui.btn.x = 123;

如果一个界面的下一层子对象名字都叫做btn,有3个,获取所有名字为btn的子对象存放在btns中

Script.ts
let ui = new GUI_3;
let btns = [];
for(let i=0;i< ui.numChildren;i++){
   let comp = ui.getChildAt(i);
   if(comp.name=="btn")btns.push(comp);
}

界面绑定类

由于系统根据界面自动生成了GUI_XX,你可以自定义类继承于GUI_XX,假设该界面存在一个名为btn的按钮则可以直接在构造函数中访问操作。

Script.ts
class MyGUI extends GUI_3 {
   constructor() {
      super();
      this.btn.x = 500;
      // 让名为btn的控件注册点击事件,当点击时执行onClick函数
      this.btn.on(EventObject.CLICK,this,this.onClick);
   }
   private onClick(e:EventObject):void{
      alert("您点击了我");
   }
}

Copyright © 2021 - 2025