关于N个多相同Button共处的优化方案
假设同一个界面中,
有一堆的功能按钮,完全相同,只是指针的数据不同,
这时候可以采用类似cacheAsBitmap的方式去处理
首先, Button的所有状态的皮肤都需要是取自同一处的BitmapData
把BitmapData装到Bitmap里给Button设置相应状态的皮肤
然后新建一个继承自Sprite的类:BitmapButton
添加MouseEvent.ROLL_OVER、MouseEvent.ROLL_OUT、Event.CHANGE
如果Button.toggle = false的情况下,
非常轻松,在ROLL_OVER里addChild(btn);
在ROLL_OUT里removeChild(btn);
在removeChild之前,取得按钮upSkin的皮肤,
btn.getStyle("upSkin");
是一个Bitmap
然后addChild(Bitmap);
也就是说,当鼠标离开这个视图的时候,我们把按钮移除掉,显示鼠标离开按钮那时候的状态的图片,也就是upSkin的图片。
当ROLL_OVER的时候 把这张图片remove掉 再次添加回这个Button
但如果Button.toggle = true的时候
这时候我们需要记录按钮的状态,在Event.CHANGE里判断,
按钮是否已经selected,并且记录下来,
当下一次ROLL_OVER的时候,判断已保存的状态并恢复回来。
这样有个好处是,不管你这个界面里有多少处用到这个按钮的地方,
对于按钮本身来说 它永远都只是一个存在的实例,只是在不同的容器中来回跑而已
我们也不用再次的创建它了。
再者,在当按钮被移除,并添加按钮当前状态的图片时,
由于我们是取自于按钮当前状态的Bitmap皮肤里的bitmapData
都只是在用同一个bitmapData
假设界面里有100处用到一个一模一样的按钮的地方,
如果不作以上处理,只是在设置按钮皮肤的时候,让Bitmap总是取同一个BitmapData
并且设置了按钮的4个不同状态,
也就是说 100个按钮用到的资源分别是:
100个按钮 + 4个BitmapData
而如果作以上处理 100个按钮用到的资源就变为:
1个按钮 + 4个BitmapData
其它产生的数据基本可以忽略不记了。。