我正在AS3中做一个项目(没有外部库或Flex),我需要在它被销毁时在一个tile上嵌入一个爆炸动画。我有一个小爆炸动画,但我不知道如何让它在特定的位置播放。有没有办法做到这一点?我试过像这样嵌入它:
[Embed(source="../assets/64x48.swf", mimeType="application/octet-stream")] private var Explosion:Class
var explosion:MovieClip;
explosion = new Explosion();
explosion.play();
但这似乎没有做任何事情。如果不是SWF,我也有一个我可以使用的爆炸精灵表,但我不知道如何在不使用外部库的情况下为精灵设置动画。
答案 0 :(得分:0)
在您想要播放的swf Movieclip中进行操作,您必须执行以下操作。 swf转换为bytearray后,必须恢复。
我检查了你的swf文件。但是,您的swf文件内容不是MovieClip
,而是AVM1Movie
文件。所以直接嵌入是很困难的。因为AVM1Movie
文件转换为MovieClip
算法。但别担心使用ForcibileLoader很容易获得。
原始ForcibileLoader here
参考以下代码。我测试了很棒的作品。
package
{
import flash.display.Loader;
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.events.Event;
import flash.net.URLRequest;
import flash.utils.ByteArray;
import flash.utils.getTimer;
import org.libspark.utils.ForcibleLoader;
public class TestProject2 extends Sprite
{
private var loader:Loader = new Loader();
private var mc:MovieClip;
public function TestProjec2t()
{
var fLoader:ForcibleLoader = new ForcibleLoader(loader);
fLoader.load(new URLRequest("../asset/64x48.swf"));
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onSwfLoaded);
this.addChild(loader);
}
private function onSwfLoaded(e:Event):void
{
trace(e.currentTarget.content);
mc = e.currentTarget.content as MovieClip;
mc.x = Math.random() * stage.stageWidth;
mc.y = Math.random() * stage.stageHeight;
mc.gotoAndPlay(1);
}
}
}