偶知道scrollRect和mask是两个概念,区别有很多,但都可以当遮罩用。而且用了scrollRect后,访问“对象.width”就直接等于scrollRect.width,这点似乎要比mask好用。可这里有adobe埋下的一个陷阱在...
假设有个对象width=200,设置scrollRect的width=100后。对象的width就马上=200了吗?No!这还得分几种情况:
1、对象有没有被add到显示列表中,如果没有,对象width不受scrollRect影响。也就是一旦对象被removeChild,width马上打回原形。
2、add到显示列表后,width并不会立刻改变(程序上叫同步)。也不是大家熟悉的“下一帧”改变,而是随机的有时下一帧,有时下两帧...
以下是测试代码:
import flash.display.Shape; import flash.geom.Rectangle; import flash.events.Event; var s:Shape = new Shape(); s.graphics.beginFill(0); s.graphics.drawRect(0,0,200,200); s.graphics.endFill(); s.addEventListener(Event.ENTER_FRAME, ef); trace('before scrollRect width:', s.width); s.scrollRect = new Rectangle(0,0,100,100); trace('after scrollRect width:', s.width); addChild(s); function ef(e:Event):void { if(s.width == 100) s.removeEventListener(Event.ENTER_FRAME, ef); trace('enter frame width:', s.width); }