什么是宽度和高度应该代表精灵?

时间:2011-02-25 16:14:17

标签: actionscript-3 graphics sprite

我在AS3中使用Sprite。最初,宽度,高度按预期为0,0。

之后:

    var tf : TextFormat = new TextFormat();
    tf.font = "Arial";
    tf.size = 48;
    tf.bold = true;
    text = new TextField();
    text.text = "A";
    text.x = 30;
    text.y = 16;
    text.selectable = false;
    text.setTextFormat(tf);
    addChild(text);

它们是100,100(即使我缩小了文本大小)。

在此之后

    graphics.beginFill(0xffffff, 1);
    graphics.drawRect(0, 0, 99, 99); 
    graphics.endFill();
    graphics.beginFill(color, 1);
    graphics.drawRoundRect(6, 6, 84, 84, 8, 8); 
    graphics.endFill();

他们是130,116。我希望它们最终会达到99,99,我错过了什么?

修改:这是第一个答案的代码,但修改为使用单个精灵:

        var s = new Sprite();
        trace("1:", s.width, ", ", s.height) // <-- 0 , 0

        var tf : TextFormat = new TextFormat();
        tf.font = "Arial";
        tf.size = 48;
        tf.bold = true;

        var text = new TextField();
        text.text = "A";
        text.x = 30;
        text.y = 16;
        text.selectable = false;
        text.setTextFormat(tf);

        s.addChild(text);
        trace("2:", s.width, ", ", s.height) //<-- 100, 100

        s.graphics.beginFill(0xffffff, 1);
        s.graphics.drawRect(0, 0, 99, 99); 
        s.graphics.endFill();
        s.graphics.beginFill(0x000fff, 1);
        s.graphics.drawRoundRect(6, 6, 84, 84, 8, 8); 
        s.graphics.endFill();

        trace("3:", s.width, ", ", s.height) //<-- 130,116

有谁可以解释为什么这两种表现不同?

干杯, 查理。

2 个答案:

答案 0 :(得分:1)

我不知道你在其他地方做了什么,但你的代码是正确的。

import flash.display.Sprite;

var s = new Sprite();
trace(s.width, ", ", s.height) // <-- 0 , 0

var tf : TextFormat = new TextFormat();
tf.font = "Arial";
tf.size = 48;
tf.bold = true;

var text = new TextField();
text.text = "A";
text.x = 30;
text.y = 16;
text.selectable = false;
text.setTextFormat(tf);

s.addChild(text);
trace(s.width, ", ", s.height) //<-- 100, 100

var s2 = new Sprite();
with(s2) {
    graphics.beginFill(0xffffff, 1);
    graphics.drawRect(0, 0, 99, 99); 
    graphics.endFill();
    graphics.beginFill(0x000fff, 1);
    graphics.drawRoundRect(6, 6, 84, 84, 8, 8); 
    graphics.endFill();
}
trace(s2.width, ", ", s2.height) //<-- 99, 99

我得到的结果。您的代码中的其他内容是否缩放对象?

答案 1 :(得分:1)

textfield的width和height属性返回textfield boarder的宽度和高度,默认为100 x 100

试试这个,看看我在说什么

text.border = true;

如果你想要文本字段中你需要的实际文本大小

trace(text.textWidth);
trace(text.textHeight);