【系列文章目录】
前言
本篇介绍在PuerTS拓展FGUI组件
一、定义拓展类
在【FGUI文档——PuerTS】中有对自定义拓展的描述
这里我们先完成第一步对类的拓展
根据FGUI官方给出的例子,我们可以按照这个例子拓展以下FGUI的Button来试试
export abstract class AbstractGButtonController extends FairyGUI.GButton{
constructor() {
super();
this.__onConstruct = this.onConstruct.bind(this);
}
protected onConstruct() {
//绑定组件
///...
}
}
这里不论是官方给出的例子在绑定FGUI的方法时,都将this传入了
区别是官方使用了
() => {
this.onConstruct()}
而我使用的是
this.onConstruct.bind(this);
如果不这样写,直接写
this.__onConstruct = this.onConstruct.bind(this);
虽然也可以调到函数,但是FGUI调用这个方法的时候,this对象会丢失
二、注册拓展类
注册扩展类。要在创建任何对象前注册好。
所以我们需要所有FGUI创建之前,将所有的拓展类进行注册
这里我把它放在上一篇文章提到的UITable中
public static UICommonEx = [
{
url: "ui://GameMain/Btn_Enter", script: testBtn },
]
这样在使用FGUI创建界面之前或者游戏一开始的时候,我将这个表遍历一次
将所有的组件与自定义拓展类绑定
//注册组件拓展:
//FairyGUI.UIObjectFactory.SetPackageItemExtension("ui://包名/组件", () => { return new 拓展类();});
public RegisterUICommonEx() {
for (let i = 0; i < UITable.UICommonEx.length; i++) {
FairyGUI.UIObjectFactory.SetPackageItemExtension(
UITable.UICommonEx[i].url,
() => {
return new UITable.UICommonEx[i].script();
}
);
}
}
这样我们就完成了注册,任何一个被注册了拓展类的组件被创建出来时,都可以通过拓展类来访问它了