Странное поведение 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);
    }
}
} 

2 ответа

Решение

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

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

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

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

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

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

Другие вопросы по тегам