as3 Air - AddChild работает, но тормозит

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

При нажатии на кнопку картинка (ну, мувиклип) всплывает и ее можно нормально перетаскивать, кнопки внутри работают.

Проблема в том, что между нажатием кнопки и появлением изображения есть пауза около 6 секунд. Я использую один файл .fla для публикации и компиляции (назовем его пока просто Main.fla), а другой — для хранения всей графики. Затем графика добавляется с помощью этой команды встраивания:

[Embed (source = "assets/graphic.swf", symbol = "Content")]
private var Content:Class; 
private var _content:*;

У меня есть эти строки, где объявлены все переменные (между определением класса и функцией конструктора). У меня сложилось впечатление, что такое встраивание эквивалентно загрузке во время компиляции. Это правда? С чем может быть связано такое отставание при нажатии кнопки?

Если я не могу сократить отставание, у меня была еще одна идея — сделать какой-нибудь вращающийся круг или что-нибудь, чтобы сказать пользователю: «Эй, не волнуйся. Он загружается!»


person Jim    schedule 20.03.2013    source источник
comment
Почему вы используете тег Embed во FLA? Насколько мне известно, это точно так же, как добавление в библиотеку, но добавление в библиотеку проще (и, возможно, более эффективно).   -  person puggsoy    schedule 20.03.2013
comment
@puggsoy декомпилировал код   -  person The_asMan    schedule 20.03.2013


Ответы (2)


Если медлительность в addChild, вы можете добавить актив на сцену намного раньше и установить для его видимости значение false, а затем, когда кнопка нажата, верните его в значение true. Очевидно, что это небольшой хак, но его может быть достаточно для того, что вы делаете.

var asset:MovieClip;

private function init():void
{
    asset = new Content();
    assset.visible = false;
    addChild(asset);

    button.addEventListener(MouseEvent.CLICK, onMouseClick);
}

private function onMouseClick(e:MouseEvent):void
{
   asset.visible = true;
}
person Barış Uşaklı    schedule 20.03.2013
comment
Хм. Я собираюсь попробовать это. У меня есть часть в начале, где я создаю все страницы, чтобы сделать их прокручиваемыми. Я мог бы просто добавить это изображение на сцену и установить для видимости значение true при нажатии кнопки. - person Jim; 21.03.2013

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

Если основной размер K исходит от большого изображения, вы можете рассмотреть возможность загрузки его сегментами, начиная с той части, которая изначально видна.

person Mike Bedar    schedule 20.03.2013