Abel Lee

 
   

关于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

其它产生的数据基本可以忽略不记了。。


 
 
评论
 
 
热度(1)