官网:https://www.fairygui.com/
基本操作
添加包:UIPackage.AddPackage(@“Assets/ArtContents\UIAssets\Sprites\homeChatBox\homeChatBox”); 创建对象: var main = UIPackage.CreateObject(“homeChatBox”, “main”); 显示: GRoot.inst.AddChild(main);
元件(GObject)
设置隐藏和显示 visible = true/false 设置交互 touchable = true/false。 设置变灰 grayed = true/false。 设置激活 enabled = true/false。 元件的激活状态其实是由变灰+不可触摸共同组成。 获取gameObject: aObject.displayObject.gameObject 销毁 Dispose。 销毁对象,当对象不再使用可以调用它,且必须调用。注意:纹理、声音等这些公共资源是由UIPackage管理的,销毁对象不会回收这些资源。如果要回收这些资源,应该使用UIPackage.RemovePackage。
事件系统
添加: gObject.事件.Set();//不会重复添加 gObject.事件.Add();//重复添加
1,onTouchBegin:开始触摸 2,onTouchEnd:结束触摸 3,onTouchMove:触摸移动 4,onRemovedFromStage:元件从舞台移出。 5,onAddedToStage:元件被添加到舞台 6,onRightClick:右键单击。冒泡事件 7,onClick:单击。冒泡事件 8,onRollOver:鼠标移入元件 9,onRollOut:鼠标移出元件 10,onKeyDown:元件接收到按键事件。只有获得焦点的情况下才能接收按键事件。冒泡事件 11,onClickLink:文本中的链接被点击 12,onPositionChanged:元件的位置改变 13,onSizeChanged:元件的大小改变 14,onDragStart/onDragEnd:拖拽开始和结束事件
GList:管理列表内容
继承自GComponent 当对列表增删改后,自动排列和刷新,不需要调用任何API。
自动排列会根据列表的布局设置item的坐标、大小和深度,所有不要自行设置item的位置,也不要设置sortingOrder尝试去控制item的深度。
垂直布局的列表之后自动设置item的y坐标。同理水平布局
这个排列和刷新发生在本帧绘制之前,如果希望立刻访问item的正确坐标,可以调用EnsureBoundsCorrect通知GList立刻重排
在列表中使用内置对象池
RemoveChildrenToPool 从池里取出(如果有)或者新建一个对象,添加到列表中。如果不使用参数,则使用列表的“项目资源”的设置;也可以指定一个URL,创建指定的对象。 RemoveChildToPoolAt 从池里取出(如果有)或者新建一个对象。 RemoveChildToPool 将对象返回池里。 ReturnToPool 删除一个item,并将对象返回池里。 GetFromPool 删除一个指定位置的item,并将对象返回池里。 AddItemFromPool 删除一个范围内的item,或者全部删除,并将删除的对象都返回池里
使用回调函数修改列表 如果添加大量item时,除了调用AddChild或AddItemFromPool之外,还可以使用 aList.itemRenderer = itemRendererCB; void itemRendererCB(int index, GObject gObj) { } 通过aList.numItems = 100;改变list的数量
虚拟列表
类似无限滚动,几百几千个item不需要每个创建 启动虚拟列表的条件: 1,需要定义itemRenderer 2,需要开启滚动。溢出处理不是滚动的列表不能开启虚拟。 3,需要设置好列表的“项目资源”。也可以调用GList.defaultItem设置 满足条件后,调用aList.SetVirtual
在虚拟列表中,显示对象和item的数量在数量上和顺序上是不一致的,item的数量可以通过numItems获得,而显示对象的数量可以由组件的API numChildren获得。
跳转到第几个位置,例如:跳到第500个
//这里要注意,因为我们要立即访问新滚动位置的对象,所以第二个参数scrollItToView不能为true,即不使用动画效果 aList.ScrollToView(500);
//转换到显示对象索引
int index = aList.ItemIndexToChildIndex(500);
//这就是你要的第500个对象
GObject obj = aList.GetChildAt(index);
刷新列表 1,使用numItems重新设置数量 2,GList.RefreshVirtualList
不能使用AddChild和RemoveChild对虚拟列表增删对象
Popup:弹出,点击空白关闭
开启: GRoot.inst:ShowPopup(gComponent); 关闭的事件: gComponent.onRemoveFromStage
注意事项
1,FairyBatching问题
如果有多个输入框的话,勾上FairyBatching后,会产生输入框失去焦点后会看不见内容
list和inputFiled问题
当输入框和list同时存在时,必须要保证输入框在list下面才行,否则会导致输入框获得焦点时,list会出现闪烁问题
|