Какую ширину и высоту предполагается представить для спрайта? - PullRequest
1 голос
/ 25 февраля 2011

Я работаю со спрайтом в AS3. Первоначально ширина, высота равны 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 ]

1 голос
/ 25 февраля 2011

атрибут width и height для текстового поля возвращает ширину и высоту границы текстового поля, которая по умолчанию составляет 100 x 100

, попробуйте это, чтобы понять, о чем я говорю

text.border = true;

если вам нужен фактический размер текста в текстовом поле, вам нужно

trace(text.textWidth);
trace(text.textHeight);
1 голос
/ 25 февраля 2011

Я не знаю, что вы делаете в другом месте, но ваш код верен.

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

Являются ли результаты, которые я получаю.Что-то еще в вашем коде масштабирует объекты?

...