1

我有一个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。我很难确定里面有很多按钮的容器的垂直大小。

4

2 回答 2

0

我在使用包含一组形状的 Sprite 时遇到过类似的问题,我通过将该 Sprite 添加到舞台,然后才查询它的大小来解决它。您可以将精灵添加到舞台,查询它的大小并立即将其从舞台上移除,这样它就不会显示,但它的大小将是有效的。

于 2013-04-04T06:24:32.987 回答
0

问题出在您的 Button 组件中。fl.control 组件的大小和比例有一些“魔力”。尽可能避免使用它们。尝试使用 flash.display.SimpleButton 而不是 fl.controls.Button。

在这种确切的情况下,您正在尝试缩放零大小的元素(因为 fl.controls.Button 的宽度和高度仅取决于它的背面大小。因此,创建 fl.controls.Button 的新对象会为您提供一个 0 的元素宽度和高度)。然后你将它的 w/h 设置为 300/200,但实际上你什么都不做,你只设置按钮的背面大小(没有背面,所以你将 0 缩放到无穷大仍然得到 0)。如您所知,容器的大小取决于它的孩子。而且您只有 1 个大小为 0/0 的孩子(您只是覆盖了按钮的 w/h 可见属性,但并没有真正将 w/h 设置为您的值)。这样,您的容器必须是 0/0,但它是 100/100,对吗?之所以如此,是因为 fl.controls 的 REAL 最小尺寸。事实上,每个 fl.controls 元素都不少于 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
于 2013-04-04T06:42:03.223 回答