Опитвам се да заредя вграден swf (който действа като звукова библиотека). Тъй като е голям swf, искам да го заредя по време на изпълнение и лентата за зареждане да показва колко е заредено.
Правейки проучване онлайн, открих, че използването на mimeType="application/octet-stream"
би било начинът да направя това. Резултатът обаче е, че вграденият swf все още се зарежда по същото време, когато се зарежда главният/обвиващ swf. Така че по някаква причина целият вграден swf вече е зареден, когато стигна до първия ред код (в този случай конструкторът LoadTest). Повечето примери, които намерих, се занимават с Flex и аз използвам 100% as3 проект (във FlashDevelop), но не виждам причина това да работи по различен начин.
Ето класа, който използвам (истинският клас е много по-сложен, но това би била основната механика на зареждане на вградения swf)
package {
import flash.display.Loader;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.ProgressEvent;
import flash.system.LoaderContext;
public class LoadTest extends Sprite {
[Embed(source = "soundLib.swf", mimeType="application/octet-stream")]
private var _soundLibSWFClass:Class;
private var _assetLdr:Loader;
public function LoadTest():void {
this._assetLdr = new Loader();
this._assetLdr.contentLoaderInfo.addEventListener(Event.COMPLETE, this.handleComplete);
this._assetLdr.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, this.handleProgress);
this._assetLdr.loadBytes(new _soundLibSWFClass(), new LoaderContext(false, this._assetLdr.contentLoaderInfo.applicationDomain));
trace("start");
}
public function handleComplete(event:Event):void {
trace("complete");
}
public function handleProgress(event:ProgressEvent):void {
trace("progress " + event.bytesLoaded +", "+ event.bytesTotal);
}
}
}
Ето какво получавам в резултата си:
progress 0, 2411787
progress 2411787, 2411787
start
complete
Ето малко повече информация за вградения swf и нещата, които опитах досега:
- Звуковата библиотека е създадена във Flash cs5 и всички звуци се намират в библиотеката и имат правилни идентификатори.
- Сцената на вградения swf е празна.
- С опцията "Експортиране на класове в рамка" уморих и 1, и 2, но това нямаше значение.
- Имам същия проблем със зареждането на други swf библиотеки (съдържащи филмови клипове например), но звуковата библиотека изглеждаше най-простата за използване в теста
- Тествах това на различни сървъри
- Изчистих кеша преди всеки тест.
- Използвах симулация на честотна лента, за да съм 100% сигурен, че зареждането на цялото нещо ще отнеме известно време.
- Дори ако премахна всички неща за зареждане, зареждането на основния swf ще отнеме известно време, което означава, че вграденият swf се зарежда едновременно.
Надявам се, че някой може да ми помогне с този проблем или има друг подход за зареждане на вграден swf по време на изпълнение (по принцип имам нужда от един swf, без цялото нещо да се зарежда наведнъж).
Благодаря!