as3 дождитесь загрузки изображения при нажатии кнопки

У меня есть слайд-шоу, которое загружает файлы изображений с помощью класса BulkLoader из здесь. Когда первое изображение загружается полностью, оно добавляется в контейнер MovieClip, чтобы добавить его на сцену... и отображается в полноэкранном режиме, но только при нажатии кнопки:

fullScreenButton.addEventListener(MouseEvent.CLICK, showFull);

function showFull(e:MouseEvent):void {   
    stage.addChild(mcSlideHolder);
    ...
}

Загрузка изображения с помощью BulkLoader в отдельной функции loadAllSlides(), которая вызывается с самого начала:

imageLoader = new BulkLoader("imgLoader");
imageLoader.add(new URLRequest(paths[0]), {id:"slide_0});                                
imageLoader.get("slide_0).addEventListener(Event.COMPLETE, onFirstSlideLoaded);
imageLoader.start(1);

И в процессе загрузки:

function onFirstSlideLoaded(e:Event):void
{
    firstImage = imageLoader.getBitmap(e.currentTarget.id);
    currentImage.addChild(firstImage);
    mcSlideHolder.addChild(currentImage); 
    mcSlideHolder.dispatchEvent(new Event("firstImgAdd"));
}

Это отлично работает, если только не нажата кнопка fullScreenButton до полной загрузки изображения, тогда, конечно, ничего не видно. Как получить событие нажатия кнопки, которое вызывает showFull() для ожидания загрузки/добавления изображения в контейнер, или как я могу добавить его снова? Каков возможный/наилучший подход?

Я попытался отправить пользовательское событие "firstImgAdd", которое снова добавляет изображение в контейнер при нажатии кнопки fullScreenButton, а также с помощью блока try/catch или даже простого условия if, но ни одно из них не сработало, то есть изображение не получает добавляется в контейнер после того, как он закончил загрузку, когда кнопка нажата слишком рано. Любая помощь приветствуется, заранее спасибо


person hreimer    schedule 06.05.2011    source источник
comment
Не могли бы вы уточнить: вы говорите о реальном полноэкранном режиме Flash Player? Из кода, который вы показываете, я не могу представить, почему вы не перейдете в полноэкранный режим при нажатии кнопки, а затем не увидите, как изображение появляется (всплывает) после завершения загрузки. Вы спрашиваете, как отложить переход в полноэкранный режим после клика? Если это так, вы не можете этого сделать. Ограничения безопасности Flash Player требуют, чтобы вызов для перехода в полноэкранный режим имел обработчик mouseEvent или keyboardEvent под ним в стеке вызовов.   -  person Adam Smith    schedule 06.05.2011
comment
да, конечно: да, речь идет о реальном полноэкранном режиме Flash. Я помещаю код для добавления mcSlideHolder сейчас после вызова полноэкранного режима с помощью stage.displayState = StageDisplayState.FULL_SCREEN; но все равно безуспешно. Нет, я не хочу откладывать переход в полноэкранный режим, просто дождитесь завершения загрузки изображения (которое загружается в фоновом режиме) и добавьте его на сцену, чтобы оно стало видимым.   -  person hreimer    schedule 06.05.2011


Ответы (2)


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

Что-то типа:

private var slideLoaded:Boolean = false;
private var requestCued:Boolean = false;

imageLoader = new BulkLoader("imgLoader");
imageLoader.add(new URLRequest(paths[0]), {id:"slide_0"});                                
imageLoader.get("slide_0").addEventListener(Event.COMPLETE, onFirstSlideLoaded);
imageLoader.start(1);

fullScreenButton.addEventListener(MouseEvent.CLICK, showFull);

function showFull(e:MouseEvent):void {   
    if (slideLoaded)
        stage.addChild(mcSlideHolder);
    else 
        requestCued = true;
}

function onFirstSlideLoaded(e:Event):void {
    slideLoaded = true;
    firstImage = imageLoader.getBitmap(e.currentTarget.id);
    currentImage.addChild(firstImage);
    mcSlideHolder.addChild(currentImage);
    if (requestCued)
        stage.addChild(mcSlideHolder);
}
person Corey    schedule 06.05.2011
comment
отключение кнопки до тех пор, пока изображение не будет загружено, является вариантом (и работало), но я не предпочитаю его, учитывая пользовательский опыт: в зависимости от скорости интернет-соединения пользователя и размера файла может потребоваться некоторое время, пока загрузка не будет завершена ... это, вероятно, лучше включить кнопку и отобразить какой-то круг ожидания/анимацию, пока изображение не отобразится.. - person hreimer; 17.05.2011

Это нарушение безопасности.
Вы НЕ можете активировать полноэкранный режим без вмешательства пользователя.

ЕДИНСТВЕННЫЙ способ активировать полноэкранный режим — непосредственно в период взаимодействия с пользователем. Т.Е.: щелчок мышью
Взгляните на это так: любой хакер, пытающийся заставить пользователя смотреть свою рекламу в полноэкранном режиме, не имеет выхода, потому что пользователь закрыл полноэкранный режим, хакер мог просто снова открыть его.

Самое близкое, что вы можете получить в полноэкранном режиме без взаимодействия с пользователем, — это развернуть SWF до полного размера HTML-документа. Фактическое событие щелчка пользователя должно быть в стеке, чтобы вы могли перейти в полноэкранный режим.

person The_asMan    schedule 06.05.2011
comment
нет, проблема не в этом. Я знаю о необходимом взаимодействии с пользователем перед переходом в полноэкранный режим. У меня полноэкранный режим активируется только при нажатии кнопки, моя проблема в том, что изображение не видно, когда кнопка для перехода в полноэкранный режим нажимается до того, как изображение загружается полностью. - person hreimer; 08.05.2011