странное поведение swfobject

Я использую swfobject для встраивания своей вспышки. Он делает странные вещи.

Я создал простое текстовое поле с помощью FlexBuilder. Это проект AS3, расширяющий Sprite. Я установил для него ширину 640 и высоту 450. Затем в параметрах swfobject страницы я также установил 640 x 450. Я сделал фон красивым, красным и уродливым, чтобы вы могли его видеть. :)

http://www.brighttext.com/flash/TextFieldSetFormat.html

Вроде бы правильные габариты. НО у меня есть текстовое поле, которое должно быть почти такого же размера и высоты. Это отлично работает в FlexBuilder (правильного размера), но когда я добавляю swfobject, все становится беспорядочно. Кто-нибудь может увидеть, что происходит?

ИЗМЕНИТЬ ПРИМЕЧАНИЕ: Я просто посмотрел на него, и он выглядит нормально. Но затем я обновил страницу, и текстовое поле было размером с почтовую марку (опять же - это исходное поведение, которое я видел). Теперь он выглядит нормально в firefox, но не в IE8. Flash должен выглядеть одинаково во всех браузерах !! ??

Код AS3:

package {
 import flash.display.Sprite;
 import flash.text.TextField;
 import flash.text.TextFormat;
 import flash.text.Font;

[SWF(width="640", height="450", backgroundColor="#FFFFFF", frameRate="30")]
public class TextFieldSetFormat extends Sprite
{
    [Embed(source='C:/WINDOWS/Fonts/ArialBD.TTF',  fontWeight = 'bold', fontName='ArialBold')]

    [Embed(source='C:/WINDOWS/Fonts/Arial.TTF', fontWeight = 'regular', fontName='Arial')]

    public function TextFieldSetFormat()
    {
        var tf2:TextFormat = new TextFormat();
        tf2.size = 16;
        tf2.font = "Arial";
        Font.registerFont(_VerdanaFontBold);
        Font.registerFont(_VerdanaFont);
        var pad:Number = 10;
        var brightTextField:TextField = new TextField;
        brightTextField.backgroundColor = 0xDDF3B2;
        brightTextField.background = true;
        brightTextField.embedFonts = true;
        brightTextField.border = true;
        brightTextField.defaultTextFormat = tf2;
        brightTextField.wordWrap = true;
        brightTextField.multiline = true;
        brightTextField.width = stage.stageWidth - (4 * pad);
        brightTextField.height = stage.stageHeight - (3 * pad);
        brightTextField.x = 2*pad;
        brightTextField.y = 2*pad;

        brightTextField.text = "Dear Senators, I have become concerned over the idea that some in the Senate will oppose the public option because of a group of wild-eyed, overbearing but misinformed ideologues. These people mistakenly equate insurance reform with Socialism and call our  first African-American President unprintable epithets. This is unacceptable. The public option is the choice of more than 70% of Americans, a majority of the House and a great many opinion leaders. Passing insurance reform without a public option persists the current broken system. I am aware that many Senators would prefer to pass a reform bill with bipartisan support. But we cannot allow this critical debate to be hijacked by extremists or corporate profiteers. Thank you, and I look forward to hearing from you.";
        addChild(brightTextField);
    }
}
} 

person David    schedule 20.11.2009    source источник


Ответы (2)


Попробуйте отследить значение stage.stageWidth / Height и используйте плагин, например Flash Tracer, чтобы увидеть, что он выводит.

Возможно, вам просто нужно добавить прослушиватель событий для Event.ADDED_TO_STAGE / INIT и выполнить свой установочный код в этом прослушивателе.

person Alex Jillard    schedule 20.11.2009
comment
Спасибо, Алекс. К сожалению, я не могу найти flashlog.txt, поэтому пока не могу заставить Flash Tracer работать. - person David; 21.11.2009

Хорошо, я понял это.

Проблема заключается в использовании stage.stageWidth и stage.stageHeight. Я еще не уверен, почему это так, но в духе гибкой разработки это исправление. :)

Вместо использования stage.stageWidth просто используйте количество пикселей. (640 x 450, в моем случае). Тогда проблема исчезнет.

Я опубликую об этом больше, включая сделанные мной скриншоты и тесты, которые я сделал, в ближайшее время в своем блоге и опубликую здесь ссылку.

person David    schedule 11.12.2009