ActionScript 3:如何防止父对象的子对象调整其宽度?
ActionScript 3: How can the re-sizing of the width of a parent object by its child be prevented?
if(_ss.x >= _l.getWidth()){
_ss.x = _l.getWidth();
_vx *= -1;
_ss 是_l 的子对象。
_l的原始宽度是1024px。
当ss.x大于1024px时_l的宽度
扩大了相同数量的像素。然而,奇怪的是
Parent,_l,本质上是一个背景和容器,不会在视觉上调整大小。 _l.width 属性 然而,当它的对象子 _ss(视觉上是 space 船)超过 _l.width 的原始像素宽度 1024 时,它会增加。
我希望防止 _ss 超出其父项的原始宽度 1024 像素。我是 ActionScript 的新手。可以做什么?
如果我理解你,你会注意到当 child 尺寸发生变化时,它反映在 parent DisplayObject
/width
和 height
属性,但不会在视觉上更改 parent。这是预料之中的,显示 object 的 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 覆盖它。例如:
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
实例的 "virtualized" 宽度不反映测量大小。您可以将其设置为您喜欢的任何内容,而不管其内容的实际大小:
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 大量使用此类东西来提供布局功能。
希望对您有所帮助。
if(_ss.x >= _l.getWidth()){
_ss.x = _l.getWidth();
_vx *= -1;
_ss 是_l 的子对象。 _l的原始宽度是1024px。 当ss.x大于1024px时_l的宽度 扩大了相同数量的像素。然而,奇怪的是 Parent,_l,本质上是一个背景和容器,不会在视觉上调整大小。 _l.width 属性 然而,当它的对象子 _ss(视觉上是 space 船)超过 _l.width 的原始像素宽度 1024 时,它会增加。
我希望防止 _ss 超出其父项的原始宽度 1024 像素。我是 ActionScript 的新手。可以做什么?
如果我理解你,你会注意到当 child 尺寸发生变化时,它反映在 parent DisplayObject
/width
和 height
属性,但不会在视觉上更改 parent。这是预料之中的,显示 object 的 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 覆盖它。例如:
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
实例的 "virtualized" 宽度不反映测量大小。您可以将其设置为您喜欢的任何内容,而不管其内容的实际大小:
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 大量使用此类东西来提供布局功能。
希望对您有所帮助。