Не получается stage.stageWidth и stageHeight в Firefox 3.5 - PullRequest
0 голосов
/ 31 мая 2010

Вот проблема, которую я пытался выяснить, но все еще не мог найти правильный способ ее исправить.

У меня проблема с дисплеем при использовании Firefox 3.5 на MAC, я вижу свое меню, и дисплей отображается правильно. Меню как раз выше того, что должно быть. Он отлично работает с Safari на MACOSX. Размер моей вспышки: 1440x750

Похоже, что Firefox не может распознать stage.StageWidth и stage.StageHeight. Возвращает 0.

Некоторые предполагают, что реализация должна была передавать фактическую ширину и высоту фильма через FlashVars. Фильм использует их вместо stage.stageWidth и stage.stageHeight

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


Я правильно использую метод EnterFrame ??

public function Main()
{
addEventListener(Event.ADDED_TO_STAGE, handleOnStage, false, 0, true);          
}


private function handleOnStage(event:Event):void
{   
removeEventListener(Event.ADDED_TO_STAGE, handleOnStage);

stage.align = StageAlign.TOP_LEFT;
stage.scaleMode     = StageScaleMode.NO_SCALE;

stage.addEventListener(Event.RESIZE, handleResizeObjectsOnStage, false, 0, true);
addEventListener(Event.ENTER_FRAME, handleObjectsOnStage, false, 0, true);

bottomBarMC.x = 0;
bottomBarMC.y = 0;
}   


private function handleObjectsOnStage(event:Event):void
{
if (stage.stageWidth != 0 && stage.stageHeight != 0) {
 removeEventListener(Event.ENTER_FRAME, handleObjectsOnStage);

 initIntro();
 initObjectsOnStage();
}   
}


private function handleResizeObjectsOnStage(event:Event=null):void
{
  if (stage.stageWidth != 0 && stage.stageHeight != 0) {
initObjectsOnStage();
  }
}


private function initObjectsOnStage():void
{
// Resize dynamically bottomBarMC
bottomBarMC.width = stage.stageWidth;
bottomBarMC.height = stage.stageHeight;
addChild(bottomBarMC);

// Resize dynamically logo
logoMC.x = 40;
logoMC.y = stage.stageHeight - 100;
addChild(logoMC);


var loadIntro:Sprite = getCurrentMC();
//loadIntro.x = stage.stageWidth;
//loadIntro.y = 0;
addChild(loadIntro);
 } 

1 Ответ

1 голос
/ 06 июня 2010

Проблема в том, что переменные размера рабочей области часто устанавливаются в течение нескольких миллисекунд при загрузке SWF-файла, поэтому, если код, позиционирующий меню, запускается до их инициализации, он увидит ширину и высоту 0.

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

Вот как это делается:

public function MainDocumentClass()
{
    addEventListener(Event.ENTER_FRAME, onEnterFrame);
}

public function onEnterFrame(e:Event):void
{
    if (stage.stageWidth != 0 && stage.stageHeight != 0)
    {
        removeEventListener(Event.ENTER_FRAME, onEnterFrame);
        onStageInitialized();
    }
}

public function onStageInitialized():void
{
    //put your menu positioning here
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...