2021-11-08FGUI 使用

UIPackage.getItemURL(“包名“,“资源名”)
AudioClip clip = (AudioClip)UIPackage.GetItemAsset(“包名称”,”声音名称”);

菜单”编辑”->“创建位图字体”,(输入字符,显示对应图片)
多信息文本(GRichTextField)支持链接和图文混排。
用例: aTextField.text = “请去找王大锤”;

列表 (GList)
AddChild : 增加一个项目。
AddChildAt :在指定的位置增加一个项目。
RemoveChild : 删除一个项目。
RemoveChildAt : 删除一个指定位置的项目。
RemoveChildren : 删除一个范围内的项目,或者全部删除。
GList内建了对象池。
使用对象池后的方法:
AddItemFromPool : 从池里取出(如果有)或者新建一个对象,添加到列表中
GetFromPool : 从池里取出(如果有)或者新建一个对象
ReturnToPool : 将对象返回池里
RemoveChildToPool : 删除一个列表项目,并将对象返回池里
RemoveChildToPoolAt : 删除一个指定位置的项目,并将对象返回池里
RemoveChildrenToPool:删除一个范围内的项目,或者全部删除,并将删除的对象都返回池里
添加对象时不使用池,对象池将不断增大。
正确的做法:从池中创建对象。即使用AddItemFromPool或GetFromPool。

虚拟列表 GList.SetVirtual
使用GList.numItems设定列表项目的数量。注意与GList.numChildren区分,后者是当前列表容器的显示对象数量。
但要注意显示对象和列表项目的数量在数量上和顺序上都是不一致的,也就是GetChildAt(0)获得的显示对象并不等于列表的第一条项目。
列表滚动到目标位置(第500个),调用GList.AddSelection(500)
虚拟列表只能通过numItems改变列表项目的数量,不允许使用AddChild或RemoveChild增删对象。例如如果要清空列表,必须要通过设置numItems=0,而不是RemoveChildren。
循环列表 GList.SetVirtualAndLoop()。

GList.ensureBoundsCorrect()通知GList立刻重排。(手动触发重新排列)

装载器 GLoader
运行时设置装载器内容的方式是:
aLoader.url = “ui://xxxxx”;
aLoader.url = “demo/aimage”; //这里加载的是路径为Assets/Resources/demo/aimage的一个贴图
例如,你希望从AssetBundle中获取资源,那么你可以扩展GLoader。首先编写你的Loader类,例如:

这是一个egret中使用到的自定义loader,使用getResByUrl这个API加载外部资源。
然后我们就可以用fairygui.UIObjectFactory.setLoaderExtension(MyGLoader);注册我们要使用的Loader类。注册完成后,游戏中所有装载器都是由MyGLoader实例化产生。
组件
点击穿透 默认情况下,组件的矩形区域将拦截点击,勾选后,点击事件可以穿透组件中没有内容的空白区域。
控制器 Controller
Controller c1 = aComponent.GetController(“c1”)
c1.selectedIndex = 1;//1是页面索引

c1.selectedPage = ‘pageName’;//pageName就是页面名称

说明:
对所有参与的页面,元件将分别保存不同的坐标值;对所有没有参与的页面,元件将保存同一个坐标值。
缓动功能 (位移的插值?)
按钮控制器 Button
单选组(RadioGroup)
在程序中,要获得或设置哪个按钮被选中也非常简单,使用控制器的selectedIndex或者selectedPage就可以了。

设置关联 ( 类似锚点,相对位置的设置 )

这里有一个垂直中线的关联,下面会说明,暂且不表。置可以看到,在文本内容发生变化时,文本的中线位置没有发生变化,位所以问号图标的置不变;但文本的右侧位发生了变化,所以叹号图标随之发生了移动,保持了与文本右侧的距离。
在代码中设置关联
(比如浏览器窗口被玩家拖大拖小),组件依然保持在右侧位置,那么可以这样调用:
aComoponet.addRelation(GRoot.inst, RelationType.Right_Right);

又例如希望一个动态添加到舞台的组件始终保持满屏大小,可以这样调用
aComoponet.setSize(GRoot.inst.width, GRoot.inst.height);
aComoponet.addRelation(GRoot.inst, RelationType.Size);

RelationType.Size相当于RelationType.Width_Width和RelationType.Height_Height的组合。这里强调一下,使组件变为满屏大小这个操作必须由你完成,也就是上面代码中的setSize调用。关联并不能完整这项任务,因为关联是不管元件当前的大小的,它只会在目标变化时保持两者大小的差别。

A:和容器组件”垂直中线“关联
B:和容器组件”右->右”关联
C:和容器组件“右->右”,”底->底“关联
D:和容器组件”底->底”,“垂直中线%”关联
E:和容器组件“底->底”关联
然后运行时把这个界面设置为满屏就可以了。
aComponent.SetSize(GRoot.inst.width, GRoot.inst.height);
aComoponet.addRelation(GRoot.inst, RelationType.Size);//当屏幕改变时仍然保持全屏

FairyGUI教程:(九)组件的扩展
FairyGUI提供的控件有:
图片(GImage)、动画(GMovieClip)、图形(GGraph)、文本(GTextField)、多信息文本(GRichTextFIeld)、列表(GList)、装载器(GLoader)、组件(GComponent)。这些都是非常基础的控件,他们是UI制作中的最小粒度。但仅靠这些基础控件是不足以制作出各种复杂的UI界面的。我们通过”扩展“功能,从组件(GComponent)中扩展出来以下这些复合组件:按钮(GButton),标签(GLabel),下拉框(GComboBox),进度条(GProgressBar),滑动条(GSlider),滚动条(GScrollbar)。

可以看到有六种“扩展”选择。组件可以随意在这些“扩展”中切换。选择哪种“扩展”,组件就有了哪个扩展的属性和行为特性。
指定统一点击音效
如果希望游戏中所有按钮的点击都有声音反馈,你并不需要每个按钮都设置一次声音属性,因为在游戏中可以使用代码UIConfig.buttonSound=’xxx’为所有按钮设置一个点击声音。
滚动条
运行时使用的滚动条需要通过以下代码设置:
UIConfig.horizontalScrollBar = ‘xxx’;
UIConfig.verticalScrollBar = ‘yyy’;
这里xxx和yyy就是滚动条资源的url。
UIConfig.defaultScrollBarDisplay = ScrollBarDisplayType.Auto; // 设置为,滚动时显示滚动条

9、自定义扩展
当基础组件、扩展组件都不能满足你的需求时,你可以编写自定义的扩展。使用API UIObjectFactory.setPackageItemExtension完成定义。例如:
UIObjectFactory.setPackageItemExtension(UIPackage.getItemURL(“包名“,”组件A”), MyComponent );
public class MyComponent extends GComponent
{
override protected function constructFromXML(xml:XML):void
{
super.constructFromXML(xml);
//在这里继续你的初始化
}
}
这样就为组件A指定了一个实现类MyComponent 。以后所有组件A创建出来的对象(包括在编辑器里使用的组件A)都为MyComponent 类型。例如:
var obj:MyComponent = UIPackage.createObject(“包名“, ”组件A”) as MyComponent ;
注意:如果组件A只是一个普通的组件,没有定义“扩展”,那么基类是GComponent,如上例所示;如果组件A的扩展是按钮,那么MyComponent的基类应该为GButton,如果扩展是进度条,那么基类应该为GProgressBar,等等。这个不要弄错。

控制器Tween效果
动效的播放在代码中启动,例如:
someComponent.GetTransition(“peng”).Play();
Play有多种原型,例如可以重复播放一定次数,可以在播放结束时回调等。要中途停止动效的播放,可以调用:
someComponent.GetTransition(“peng”).Stop();
Stop方法也可以带参数,原型是
public void Stop(bool setToComplete, bool processCallback);
setToComplete表示是否将组件的状态设置到播放完成的状态,如果否,组件的状态就会停留在当前时间。processCallback是否调用Play设定的播放完成回调函数。

注意:UI动效播放完毕后,组件的状态将停留在最后一帧,而不是回到第一帧,如果你希望动效播放完后组件的状态复原到播放前,你可以最后添加一帧重新设置组件的状态。

高级用法:
public void SetValue(string label, params object[] aParams)
改变指定帧的数值,例如某帧Label为aa,这帧是设置某个元件的XY值的,那么调用setValue(aa, 100,200)就可以将原来此帧设置XY的数值改为100,200。
public void SetHook(string label, TransitionHook callback)
可以设定运行到某帧时发生一个调用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值