Як за допомогою [embed] вбудувати swf з кодом

Ми знаємо, що при вбудуванні swf за допомогою теґу [Embed] увесь код, який був у swf-ці, втрачається. Є один спосіб як зберегти код.

Спочатку створимо у Flash IDE флешку, головним класом якої буде, наприклад, assets.Flea. В цьому класі є метод startJumping(), який просто починає програвання флешки. Назвемо файл flea.swf.

Тепер вбудуємо flea.swf в будь-який клас у Flex-проекті:

  1. [Embed(”assets/flea.swf”, mimeType=”application/octet-stream”)]
  2. private var FleaAsset:Class;

mimeType=”application/octet-stream” дає зрозуміти компілятору Flex, що вбудування потрібно робити без будь-якої конвертації даних.

Тепер в FleaAsset ми маємо клас ByteArrayAsset, тобто, практично ByteArray.

Далі завантажуємо екземпляр FleaAsset до Loader за допомогою loadBytes():

  1. var currLoader:Loader = new Loader();
  2. var ldrContext:LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain);
  3. currLoader.loadBytes( new FleaAsset(), ldrContext );

ldrContext ми використовуємо, щоб бути впевненими, що клас, який знаходиться в FleaAsset буде тим самим, що і в Flex проекті.

Далі, щоб клас із FleaAsset з’явився для нашого використання, нам потрібно почекати один кадр. Це не дуже добре, але як це обійти я не знаю.

  1. var sprite:Sprite = new Sprite();
  2. sprite.addEventListener(Event.ENTER_FRAME, enterFrameHandler);

Далі, ми просто створюємо екземпляр класу assets.Flea та використовуємо його як забажаємо. Уся графічна частина цього класу, яку ми створили у Flash IDE, буде присутня :)

  1. import assets.Flea;
  2. function enterFrameHandler(event:Event):void
  3. {
    1. var flea:Flea = new Flea();
    1. addChild(flea);
    1. flea.startJumping();
    2. sprite.removeEventListener(Event.ENTER_FRAME, enterFrameHandler);
  4. }

Я зробив приклад такої собі бібліотеки, яка може спростити роботу з убудованими swf.

Щоб знати більше раджу почитати це (англійською):

Таґи: , , , ,

Один коментар to “Як за допомогою [embed] вбудувати swf з кодом”

  1. nouba:

    кул! рилі кул! :)

Залиште свій коментар