我设置了fl.controls.Button
大小(w:300,h:200)。然后我将此按钮添加到空的“容器”精灵中。据我所知,在查看显示对象的宽度/高度参数时,会考虑显示对象的子项。但对于按钮对象来说,这似乎并不完全正确吗?
例如:
var container:Sprite = new Sprite();
trace(container.width, container.height); // 0 0
var btn:Button = new Button();
btn.setSize(300, 200);
this.addChild(container);
container.addChild(btn);
trace(btn.width, btn.height); // 300 200
trace(container.width, container.height); // 100 100 - Why??
var rectangle:Sprite = new Sprite();
rectangle.graphics.drawRect(0, 0, 500, 400);
container.addChild(rectangle);
trace(container.width, container.height); // 500 400
为什么容器没有给出与按钮相同的宽度/高度值,因为它是精灵内部唯一的东西。同样,如果我写setSize(40,40)
,容器的大小仍然是100x100。这使得我很难确定容器内部有许多按钮的垂直尺寸。
答案 0 :(得分:0)
我遇到了一个包含一组Shapes的Sprite的类似问题,我已经通过将Sprite添加到stage来解决它,然后才查询它的大小。您只需将精灵添加到舞台,查询其大小并立即将其从舞台中删除,因此它不会显示,但其大小将有效。
答案 1 :(得分:0)
问题出在Button组件中。 fl.control组件的大小和规模有一些“神奇”。尽可能避免使用它们。尝试使用flash.display.SimpleButton而不是fl.controls.Button。
在这种情况下,你试图缩放零大小的元素(因为fl.controls.Button的宽度和高度仅取决于它的背面大小。所以,创建一个新的fl.controls.Button对象会给你一个0宽度和高度的元素)。然后你将它的w / h设置为300/200,但实际上你什么都不做,你只设置了按钮的后面尺寸(没有后退,所以你用无穷大缩放0并且仍然得到0)。如您所知,容器的大小取决于它的孩子。并且你只有一个0/0大小的孩子(你只是覆盖了按钮的w / h可见属性,但没有真正设置w / h到你的值)。那样,你的容器必须是0/0,但它是100/100,对吗?这是因为fl.controls的REAL最小尺寸。每个fl.controls元素IN FACT都不低于100/100,即使你在跟踪上得到0/0 w / h。
所以,我建议你尽量避免使用fl.controls,这样可以节省很多时间=)
以下是一些代码:
var btn:Button = new Button();
trace(btn.width, btn.height, btn.scaleX, btn.scaleY); //0 0 NaN NaN
btn.width = 300;
btn.height = 200;
trace(btn.width, btn.height, btn.scaleX, btn.scaleY); //300 200 Infinity Infinity