layabox(小技巧及注意事项汇总(不定时更新))

1、在UI组件预设和页面嵌套中尽量选择后者,因为前者无法再增加新的元素,但使用后者时注意如果希望使用自定义的runtime,需要在UI页面的默认属性中添加runtime=xx类名,或者使用前调用View.regViewRuntime()去注册,不然会使用UI默认的runtime(这两种方法有一定区别,设置默认属性是替换掉UI默认的uiClassMap,而注册是添加viewClassMap,viewClassMap的优先级比uiClassMap高,所以都能实现不使用UI默认runtime的需求);
2、comboBox控件如果UI内设置了selectedIndex属性,那么在代码中就无法给selectedIndex赋同样的值(会导致期待执行的selectHandler无法执行到);
3、给按钮添加监听事件,如果监听函数地址不同,会叠加,地址相同则不会,所以在给List的cell中的按钮添加监听事件时,要注意使用匿名函数或者箭头函数会导致叠加监听事件的问题;
4、transform.rotate()即使只改变xyz中的某一个,也会使transform.localRotation的4个值全部变化;
5、所有节点里的timer其实都指向Laya.scaleTimer,在节点里新增timer时,Laya.scaleTimer._handlers和Laya.timer._handlers[0].caller._handlers都会增加元素,但两者指向是否相同未知。所以在节点里增加的timer不可以调用Laya.timer里的清理方法去移除;
6、List控件:1)List创建时cells.length与array.length无关联,cells.length值固定为可视范围加多一行/列的范围内能显示完的数量,如果array.length较小,就会有一些空dataSource的cell,如果array.length较大,也只是一直复用cells里的UI,随着滚动不停的重置cell的dataSource,调用renderHandler去刷新UI;
2)List的cell较多时不会全部渲染,cells里只有可视cell,如果要改变非可视cell的状态,只能通过修改数据源刷新UI实现;
3)List的Box中如果只有皮肤资源为非合图的控件,可能出现问题;
4)List的Box中如果有slider时,改变slider.bar的stateNum时可能达不到理想的效果,因为在List中的slider.bar改变stateNum时不会调用changeState一类的函数,但原因不清楚。解决方法,在设置renderHandler前给array赋一次值,设置之后再赋一次值,改变就正常了;
5)List的部分方法或属性操作会延时重刷一遍cells(重新执行一遍renderHandler),例如array、cells、设置ScrollBarSkin等;
6)List在滚动中即使被隐藏,或是分页切换不再显示,都会继续滚动并执行renderHandler,此时可能renderHandler中所用数据会发生改变;
7、3D模型:1)模型在播放动作时如果资源里有改变颜色之类的参数,代码中无法在动作播放过程中改变反射率之类的参数;
2)设置模型的渲染模式renderMode时要注意,支持半透明的模式可能在不透明的情况下会影响自己和其他模型的渲染显示优先级(意外的盖住不应该盖住的模型),如果要做半透明,在设置半透时才去改变渲染模式,不透明时马上把渲染模式还原回去;
8、3D粒子:1)ShurikenParticleSystem类目前没有提供修改速率的接口,如需修改,可通过:1、同时等比例修改duration和startLifetimeConstant属性值;2、修改源码的_updateEmission方法中调用_updateParticles时的参数;
2)如果需要对粒子进行缩放,需要lh资源中的scaleMode的值为0才可以;
3)目前无法控制不同3D粒子特效的渲染优先级,要控制渲染优先级,只能用模型特效;
9、初始化View的时候,会在View的createView()中将UI内设置的属性值赋值给View对象并计算一些只填了centerX/Y的控件的x/y值,所以如果需要在代码中动态修改控件的属性,建议在createView()之前赋值,并且UI内不要设置对应的属性值,否则可能使赋值无效或者影响到坐标转换一类的操作;
10、缓动Tween:主动清理缓动或者缓动被覆盖(覆盖中也会调用清理)时,还未改变完成的属性不会再继续变化,如果会导致问题,需要重置一下在缓动中改变的属性;
11、Laya.loader:1)加载的Sprite3D资源,相同的url共用一份,如果不希望共用,就克隆后使用克隆副本;
2)如果Sprite3D资源还在加载中,通过getRes会拿到没有数据的对象,此时操作可能会出现问题,所以在getRes时需要判断资源的loaded为true时才去正常使用,为false就另行处理;
【layabox(小技巧及注意事项汇总(不定时更新))】12、UIGroup:如果要文本竖排显示,可以去设置item(常用的子类RadioGroup的item是Radio,继承自Button,内部创建了Text,有text属性)的text.wordWrap和text.width属性,但注意必须要延时调用(callLater)。

    推荐阅读