Flash as3-从资源类获取库符号
我已经创建了一个assets.swf,我想在其中保留我所有的符号。然后,我创建了一个Assets类来进行嵌入。看起来是这样的:Flash as3-从资源类获取库符号,flash,actionscript-3,embed,assets,Flash,Actionscript 3,Embed,Assets,我已经创建了一个assets.swf,我想在其中保留我所有的符号。然后,我创建了一个Assets类来进行嵌入。看起来是这样的: public class Assets extends MovieClip { [Embed(source="assets.swf", symbol="MyBox")] public static var MyBox:Class; public function 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:在非构造函数上尝试实例化”。我如何才能访问assets类中的资产?编辑:我想你会找到答案的 以下内容适用于使用加载了
Loader
class的SWF中的类
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);
}
实现它的另一个好方法是编译SWC并像导入其他类一样导入它 在SWC中为AS导出的每个符号将在相同的范围内为您提供
这节省了大量的代码编写,并将资源直接嵌入到SWF中,避免了多个加载程序。如果仍然需要.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);
}
另一种方法是导出要由操作脚本使用的符号,并改用.swc。您可以在flash文件中设置具有完整名称空间的类,因此对于MyBox,您可以将其设置为com.company.Assets.MyBox,其用法与您预期的类似:
import com.company.Assets.*;
...
public function Game()
{
var myBox:MovieClip = new MyBox();
addChild(myBox);
}
可以在资产类中创建新对象。。(这也使您有可能创建一个可重用资产池) 比如:
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()
{
}
}
您确定symbol=“MyBox”是正确的符号名称吗?因为你似乎做得很好,我也有同样的问题。你使用的是Flash还是FlashDeveloper?我开始怀疑这是一个FlashDeveloper特性(不是AS3特性)