0

我已将 PowerPoint 转换为 Flash,因此每张幻灯片都是 .swf。我使用了许多不同的转换器,这里的问题是一样的。

我想做的是以编程方式触发 .swf 的动画(显示幻灯片的内容)。我可以用鼠标单击 .swf 并且动画会前进。当 .swf 嵌入网页时,我可以自动执行此操作,只需执行以下操作:

document.getElementById('myMovie').play();

每次我执行该代码时,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()"/>

我也尝试过加载为图像组件并使用模拟点击...不好。谁能告诉我我该怎么做?

4

1 回答 1

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"/>
于 2013-08-27T14:30:30.417 回答