Sprite的宽高设置及Flex组件的混淆
由于Bitmap和InteractiveObject同级,都继承自DisplayObject,因此没有右键菜单,需要在外部套上一个Sprite。
?
?
图片的宽为19,高为25.
?
情况1:
?
var s:Sprite = new Sprite();s.addChild(btsImage);
?一切正常。
?
?
情况2:
?
var s:Sprite = new Sprite();s.width = 40 ;//btsImage.width ;s.height = 40 ;//btsImage.height ;s.addChild(btsImage);
?s的宽和高都为0,图片不显示。
?
?
情况3:
var s:Sprite = new Sprite();s.addChild(btsImage);s.width = 40 ;//btsImage.width ;s.height = 40 ;//btsImage.height ;
图片显示,并且被放大。
?
情况4:
?
s.width = 40 ;//btsImage.width ;s.height = 40 ;//btsImage.height ;s.addChild(btsImage);s.width = 40 ;//btsImage.width ;s.height = 40 ;//btsImage.height ;
?图片显示,并且被放大;
?
?
既然情况1正常,为么情况2就不正常呢?
?
更新:
原因可能是这样,Flex组件用习惯了,被延迟渲染惯坏了。实际上,经常是先给Flex组件的各种属性赋值,然后再添加到容器,这时候就用到了延迟加载,使得x y width height生效。但AS组件没有延迟渲染,就需要先添加到容器,然后赋值。
?
P.S. :
Sprite的width和height直接继承自DisplayObject,属性说明为:
Indicates the width of the display object, in pixels. The width is calculated based on the bounds of the content of the display object. When you set the?width
?property, the?scaleX
?property is adjusted accordingly
显示对象的宽度,单位为像素。此宽度的计算基于其内容的边界。当设置width属性,其scaleX属性会相应被调整。
Except for TextField and Video objects, a display object with no content (such as an empty sprite) has a width of 0, even if you try to set?width
?to a different value.
除了TextField和Video之外,没有内容的显示对象(例如空的Sprite)的宽度为0,即使你设置了其他的值。