ActionScript 3:如何防止子对象调整父对象的宽度?

时间:2015-03-26 22:30:31

标签: actionscript-3 flash

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的新手。可以做些什么?

1 个答案:

答案 0 :(得分:3)

如果我了解您,您会注意到,当子尺寸发生变化时,它会被其父级DisplayObject / widthheight属性反映出来,但是不会在视觉上改变父母。这是预期的,显示对象widthheight(和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大量使用这种东西来提供布局功能。

希望有所帮助。