Рекомендации по загрузке Flash AS3

Я создаю интерактивное флеш-приложение, в котором мне нужно использовать множество звуковых файлов и изображений. В настоящее время я загружаю ресурсы (как изображения, так и звуковые файлы) по мере необходимости. Когда я запускаю его на своем компьютере, все работает нормально, и я не вижу задержки. Запуск на внешнем компьютере показывает паузы и задержки. Я знаю, что это связано со временем, которое требуется для загрузки ресурсов.

Я хочу знать, как лучше всего загружать ресурсы. Стоит ли предварительно загружать все вначале (что создаст значительную паузу)? Не лучше ли делать короткую паузу несколько раз, когда нужен новый ресурс? Или есть решение получше (надеюсь, это так)?

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


person user922467    schedule 24.11.2011    source источник


Ответы (3)


Я согласен с @kapep, что вы должны предварительно загружать часто используемые ресурсы в начале. Если есть большие ресурсы, которые могут не понадобиться пользователю, вы можете загрузить их по запросу.

Если этот тест является последовательным, вы можете загрузить материал «Контрольный вопрос 2» сразу после начала «Контрольного вопроса 1». Вы можете загружать асинхронно, чтобы приложение оставалось интерактивным (пользователь может взаимодействовать с тестовым вопросом 1), пока загружается больше материала (ресурсы для тестового вопроса 2).

person Boundless    schedule 24.11.2011
comment
Похоже, два повторяющихся ответа указывают мне в одном направлении. Спасибо за помощь. - person user922467; 24.11.2011

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

Это также зависит от того, насколько велики ресурсы. Вы не должны позволять пользователям долго ждать или создавать большой трафик. С другой стороны, может быть проще выполнить одну предварительную загрузку, чем загружать каждый крошечный ресурс в одном запросе. Возможно, вы могли бы определить более крупные наборы за один шаг, чтобы избежать этого. Вы даже можете комбинировать оба метода: предварительно загрузить некоторые общие ресурсы и загрузить некоторые другие вещи в фоновом режиме.

person kapex    schedule 24.11.2011
comment
Приложение - тест для детей. В основном потребуются все ресурсы, но некоторые из них могут не использоваться из-за ветвления в программе. Большинство ресурсов от 20 до 200 кб. На данный момент мои общие ресурсы составляют около 12 МБ, но ожидается, что к моменту завершения приложения они увеличатся до 50–70 МБ. - person user922467; 24.11.2011
comment
@ user922467 Это много для предварительной загрузки imho, особенно если она будет расти. Я бы, вероятно, попытался загрузить ресурс для следующего вопроса (ов), пока пользователь отвечает на текущий. Может возникнуть проблема, если следующий вопрос будет зависеть от ответа на текущий вопрос ... либо пусть пользователь подождет, либо загрузит то, что ему не понадобится. Это вам решать. - person kapex; 24.11.2011
comment
Спасибо за вашу помощь. Я постараюсь заранее задать несколько вопросов. - person user922467; 24.11.2011

Для предварительной загрузки ресурсов я настоятельно рекомендую использовать библиотеку Greensock. Фактически, используя LoaderMax, вы можете поставить контент в очередь для загрузки, а затем прикрепить загруженный контент к контейнерам ( видеоклипы, спрайты и т. д.)

Вот пример кода для загрузки нескольких ресурсов:

var queue:LoaderMax = new LoaderMaxVars()
                .maxConnections(1)
            .onProgress(onContentProgress)
            .onIOError(onIOErrorHandler)
                            .onComplete(onContentLoaded));

queue.append(new SWFLoader(contentTobeLoaded,new SWFLoaderVars().name(loaderName)));

....

private function onEmployeeContentLoaded(event:LoaderEvent):void {
  var loadedContent:Array = (event.target as LoaderMax).content;
  ....
person Mahmut C    schedule 25.11.2011