我刚开始使用FlashDevelop“动手”学习Actionscript 3。
我现在设法对子画面进行子类化,从库中加载图形,并在舞台上对其进行操作。下一步是使用MovieClip做同样的事情,但它看起来并不那么简单。
基本上,我想要一个简单的MovieClip子类,它使用我创建的SWF&在Flash CS5中导出(其他任何可以创建它们的东西?),然后将它添加到我的FlashDevelop库中。
在我的“主要”课程中,我想要这样的东西:
package
{
import flash.display.MovieClip;
import flash.events.Event;
public class Main extends Sprite
{
private var myClip:MovieClip;
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
myClip = new MyMovieClip();
addChild(myMovieClip);
}
}
}
所以,对于我的子类,我正在寻找一些东西,比如:
package
{
import flash.display.MovieClip;
[Embed(source = '../lib/MyButton.swf', mimeType = 'application/octet-stream')]
public class MyMovieClip extends MovieClip
{
public function MyMovieClip()
{
// Empty
}
}
}
但那没用。然后我试了一下:
package
{
import flash.display.MovieClip;
public class MyMovieClip extends MovieClip
{
[Embed(source = '../lib/MyButton.swf', mimeType = 'application/octet-stream')]
private var MyMovieLivClass:Class;
private var myClip:MovieClip;
public function MyMovieClip()
{
myClip = new MyMovieLivClass() as MovieClip;
addChild(myClip);
}
}
}
但是那个孩子是空的,我不确定我是不是应该在我的子类MovieClip中创建一个“新的”MovieClip。
我在这里缺少的是什么步骤?
答案 0 :(得分:2)
在上一个示例中,您正确使用了Embed(您无法在类声明中使用它)。如果myClip
为null,则表示强制转换as MovieClip
失败,MyButton.swf表示其他类型。如果MyButton.swf只有一个帧,那么它将是Sprite,而不是MovieClip。
编辑:我希望我早些时候注意到这一点。您的剪辑嵌入为ByteArrayAsset,其原始字节为mimeType。从Embed中删除mimeType,编译器将使其成为MovieClipAsset,即MovieClip。