Як за допомогою [embed] вбудувати swf з кодом
Ми знаємо, що при вбудуванні swf за допомогою теґу [Embed] увесь код, який був у swf-ці, втрачається. Є один спосіб як зберегти код.
Спочатку створимо у Flash IDE флешку, головним класом якої буде, наприклад, assets.Flea. В цьому класі є метод startJumping(), який просто починає програвання флешки. Назвемо файл flea.swf.
Тепер вбудуємо flea.swf в будь-який клас у Flex-проекті:
[Embed("assets/flea.swf", mimeType="application/octet-stream")]
private var FleaAsset:Class;
mimeType=”application/octet-stream” дає зрозуміти компілятору Flex, що вбудування потрібно робити без будь-якої конвертації даних.
Тепер в FleaAsset ми маємо клас ByteArrayAsset, тобто, практично ByteArray.
Далі завантажуємо екземпляр FleaAsset до Loader за допомогою loadBytes():
var currLoader:Loader = new Loader(); var ldrContext:LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain); currLoader.loadBytes( new FleaAsset(), ldrContext );
ldrContext ми використовуємо, щоб бути впевненими, що клас, який знаходиться в FleaAsset буде тим самим, що і в Flex проекті.
Далі, щоб клас із FleaAsset з’явився для нашого використання, нам потрібно почекати один кадр. Це не дуже добре, але як це обійти я не знаю.
var sprite:Sprite = new Sprite(); sprite.addEventListener(Event.ENTER_FRAME, enterFrameHandler);
Далі, ми просто створюємо екземпляр класу assets.Flea та використовуємо його як забажаємо. Уся графічна частина цього класу, яку ми створили у Flash IDE, буде присутня :)
import assets.Flea;
function enterFrameHandler(event:Event):void
{
var flea:Flea = new Flea();
addChild(flea);
flea.startJumping();
sprite.removeEventListener(Event.ENTER_FRAME, enterFrameHandler);
}
Я зробив приклад такої собі бібліотеки, яка може спростити роботу з убудованими swf.
Щоб знати більше раджу почитати це (англійською):
- Про теґ [Embed] та про mimeType які підтримує Flex
- Про ApplicationDomain і навіщо він потрібен
- Трішки про класи *Asset
- Приклад вбудування XML
Таґи: application/octet-stream, ByteArrayAsset, Flash IDE, mimeType, [Embed]
March 27, 2008 в 13:57
кул! рилі кул! :)
October 17, 2010 в 17:38
Спасибо! После трех дней мучений я наконей решил проблему.
Неужели интеграция двух родственных платформ доложна быть настолько геморройной?..
October 17, 2010 в 18:26
если грузить ассеты как внешний файл – геморроя немного меньше :)