Странное поведение 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 и выполнить код установки в этом прослушивателе.