if(_ss.x >= _l.getWidth()){
_ss.x = _l.getWidth();
_vx *= -1;
_ss是_l的子对象。 _l的原始宽度为1024px。 当ss.x大于1024px时_l的宽度 被相同数量的像素扩展。然而,奇怪的是 Parent,_l本质上是一个背景和容器,不会在视觉上调整大小。但是,_l.width属性在其对象子_ss(视觉上是太空飞船)超过_l.width的原始像素宽度1024时会增加。
我希望阻止_ss超出其父级的原始宽度1024px。我是ActionScript的新手。可以做些什么?
答案 0 :(得分:3)
如果我了解您,您会注意到,当子尺寸发生变化时,它会被其父级DisplayObject
/ width
和height
属性反映出来,但是不会在视觉上改变父母。这是预期的,显示对象width
和height
(和getBounds()
)反映其内容的测量大小,并且当大小更改时没有图形的自动布局这种方式(例如绘制填充容器边界的背景)。
换句话说:
var container:Sprite = new Sprite();
container.graphics.beginFill(0xff0000);
container.graphics.drawRect(0, 0, 100, 100);
trace(container.width, container.height); // 100 100
var child:Shape = new Shape();
child.graphics.beginFill(0x00ff00);
child.graphics.drawRect(0, 0, 500, 500);
trace(child.width, child.height); // 500 500
container.addChild(child);
trace(container.width, container.height); // 500 500
您无法在一般意义上阻止此行为,但您可以使用扩展类覆盖它。例如:
class UISprite extends Sprite {
private var _width:Number = 0;
override public function set width(value:Number):void {
_width = value;
}
override public function get width():Number {
return _width;
}
}
现在UISprite
实例有一个"虚拟化"宽度不反映测量的尺寸。您可以将其设置为您喜欢的任何内容,无论其内容的实际大小如何:
var ui:UISprite = new UISprite();
trace(ui.width); // 0
ui.width = 100;
trace(ui.width); // 100
您可以添加内容,但不会影响width
属性:
var child:Shape = new Shape();
child.graphics.beginFill(0xff0000);
child.graphics.drawRect(0, 0, 500, 500);
ui.addChild(child);
trace(ui.width); // 100
Flex大量使用这种东西来提供布局功能。
希望有所帮助。