我已将PowerPoint转换为Flash,因此每张幻灯片都是.swf。我使用了许多不同的转换器,这里的问题是一样的。
我想要做的是以编程方式触发.swf的动画(幻灯片显示的内容)。我可以用鼠标点击.swf,动画就会前进。当.swf嵌入网页时,我可以自动执行此操作:
的document.getElementById( '为myMovie')播放();
每次执行该代码时,swf都会前进到下一个动画。但是,我无法在flex中找到一种方法。我已经使用了MovieClipSWFLoader并试过:
private function animate():void {
var simulatedClick1:MouseEvent = new MouseEvent(MouseEvent.CLICK);
var simulatedClick2:MouseEvent = new MouseEvent(MouseEvent.MOUSE_DOWN);
var simulatedClick3:MouseEvent = new MouseEvent(MouseEvent.MOUSE_UP);
frameNo++;
myMovie.gotoAndStop(frameNo);
myMovie.nextFrame();
myMovie.nextScene();
myMovie.play();
myMovie.dispatchEvent(simulatedClick1); // with clicks 1, 2, and 3
}
<s:MovieClipSWFLoader id="myMovie" source=""/>
<s:Button id="btnAnimate" click="animate()"/>
我也尝试加载作为图像组件并使用模拟的点击...没有好处。谁能告诉我怎么做到这一点?
答案 0 :(得分:0)
问题是.swf是使用Flash 8创建的,与我的Flex版本不兼容。我在https://gist.github.com/nsdevaraj/409902的ForcibleLoader中找到了一个很好的解决方案。它将旧的.swf转换为新的。然后代码按原样运行。
private var libMC:MovieClip = new MovieClip();
ur = new URLRequest(guide_url);
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, swfComplete);
var fLoader:ForcibleLoader = new ForcibleLoader(loader);
fLoader.load(ur);
swfMovie.addChild(loader);
private function swfComplete(event:Event):void{
libMC = event.currentTarget.content as MovieClip;
}
private function animate():void {
libMC.nextFrame();
<mx:UIComponent id="swfMovie"/>