开发者

What are width and height supposed to represent for a sprite?

I'm working with a Sprite in AS3. Initially, width,height are 0,0 as expected.

After this:

    var tf : TextFormat = new TextFor开发者_开发百科mat();
    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);

they are 100,100 (even if I shrink the text size).

After this

    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();

They are 130,116. I would expect them to end up at 99,99, what am I missing?

Modification: here's the code from the first answer, but modified to use a single sprite:

        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

Can anyone explain why these 2 behave differently?

Cheers, Charlie.


I don't know what you're doing elsewhere, but your code is right.

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

Are the results I get. Is something else in your code scaling objects?


the width and height attribute for a textfield returns the width and height of the textfield boarder, which by default is 100 x 100

try this to see what I'm talking about

text.border = true;

if you want the actual size of the text in the textfield you need

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜