2009-09-23 3 views
3

Я создал файл assets.swf, в котором я хочу сохранить все свои символы. Затем я создал класс Assets, который выполняет вложение. Это выглядит следующим образом:as3 - получение символов библиотеки из класса Assets

public class Assets extends MovieClip 
    { 
     [Embed(source="assets.swf", symbol="MyBox")] 
     public static var MyBox:Class; 

     public function Assets() 
     { 

     } 

    } 

Теперь, в каком-то другом классе, я хочу создать новую коробку:

import com.company.Assets; 
... 
public function Game() 
{ 

    var myBox:MovieClip = new Assets.MyBox(); 
    addChild(myBox); 

} 

Я знаю, это неправильно, и я получаю «TypeError: Error # 1007: Мгновенное действие было предпринято для неконструктора. " Как получить доступ к активам в классе «Активы»?

+0

Вы уверены, что символ = «MyBox» является правильное имя символа? Потому что вы, кажется, делаете это правильно по http://www.bit-101.com/blog/?p=853 – Amarghosh

+0

У меня тоже такая же проблема. –

+0

Вы используете Flash или FlashDeveloper? Я начинаю подозревать, что это функция FlashDeveloper (не AS3-функция) –

ответ

2

Редактировать: Я думаю, вы найдете ответ here.

Для использования классов из SWF, загруженного с классом Loader, применяется следующее.

private function onLoad(e:Event):void 
{ 
var domain:ApplicationDomain = LoaderInfo(e.target).applicationDomain; 
var Type:Class = domain.getDefinition("pack.MyComponent") as Class; 
var myBox:MovieClip = new Type(); 
addChild(myBox); 
} 
1

Еще один хороший способ добиться этого - просто скомпилировать SWC и импортировать его точно так же, как другой класс.

Каждый символ, экспортированный для AS внутри вашего SWC, будет доступен вам в той же области.

Это экономит много кода, записывая и вставляя активы непосредственно внутри вашего SWF, избегая нескольких загрузчиков.

0

Если вы все еще хотите маршрут .swf, вы можете:

public class Assets extends MovieClip 
    { 
     [Embed(source="assets.swf", symbol="MyBox")] 
     private static var _MyBox:Class; 
     public static function get NewBox():MovieClip { 
      return new _MyBox(); 
     } 
    } 
... 

import com.company.Assets; 
... 
public function Game() 
{ 

    var myBox:MovieClip = Assets.NewBox; 
    addChild(myBox); 

} 

Альтернативой экспортировать символы, которые вы хотите использовать с помощью Action Script и использовать .swc вместо этого. Вы можете установить классы с полным пространством имен внутри флэш файла, поэтому для MyBox вы могли бы сделать его com.company.Assets.MyBox и использование было бы похоже на то, что вы хотели:

import com.company.Assets.*; 
... 
public function Game() 
{ 

    var myBox:MovieClip = new MyBox(); 
    addChild(myBox); 

} 
0

Вы можете создать новый объекты в классе активов .. (что дает вам также возможность сделать пул повторно используемых активов)

что-то вроде:

public class Assets extends MovieClip 
{ 
    [Embed(source="assets.swf", symbol="MyBox")] 
    private static var MyBox:Class; 

    public static function getNewBox():DisplayObject { 
     return new MyBox(); 
    } 

    public function Assets() 
    { 

    } 
}