6.7.载入外部swf文件并与之交互

问题
我要载入而且控制外部的SWF文件
解决办法
使用Loader 类载入.swf 文件,然后通过Loader实例的content 属性访问
讨论
6.6节演示了如何通过Loader 类载入外部图片资源,载入swf 文件也是同样的方法,通过load( )方法,然后传递一个.swf文件的URL。

我们创建两个独立的.swf文件:ExternalMovie.swf 和LoaderExample.swf。第一个稍后要被载入到第二个上,也就是LoaderExample.swf。ExternalMovie.swf 的代码如下:
+展开
-ActionScript
package {
import flash.display.Sprite;
import flash.display.Shape;
public class ExternalMovie extends Sprite {
private var _color:uint = 0x000000;
private var _circle:Shape;
public function ExternalMovie( ) {
updateDisplay( );
}
private function updateDisplay( ):void {
// 如果circle 没有创建则创建之并显示
if ( _circle == null ) {
_circle = new Shape( );

addChild( _circle );
}
// 清除以前画的内容重新画并填充之
_circle.graphics.clear( );
_circle.graphics.beginFill( _color );
_circle.graphics.drawCircle( 100, 100, 40 );
}
// 改变颜色
public function setColor( color:uint ):void {
_color = color;
updateDisplay( );
}
// 获取颜色
public function getColor( ):uint {
return _color;
}
}
}

ExternalMovie.swf 运行时就画了一个黑色的圆,需要注意的是有两个用来访问和设置颜色的方法getColor( ) 和setColor( )。无论何时setColor( ) 方法被调用,圆立即被重画。

申明方法为public,这样载入它的类也可以访问这些方法,updateDisplay( ) 方法是私有的,也就是说LoaderExample.swf,是无法调用它的。

现在通过LoaderExample.swf去载入ExternalMovie.swf,代码如下:
+展开
-ActionScript
package {
import flash.display.*;
import flash.net.URLRequest;
import flash.events.Event;
public class LoaderExample extends Sprite {
private var _loader:Loader;
public function LoaderExample( ) {
// 创建Loader并显示
_loader = new Loader( );

addChild( _loader );
// 添加于载入swf文件的交互事件
_loader.contentLoaderInfo.addEventListener( Event.INIT, handleInit );
// 载入外部文件
_loader.load( new URLRequest( "ExternalMovie.swf" ) );
}
// 当文件载入完时触发该函数
private function handleInit( event:Event ):void {
// 这里设置为* 就是指事先不知道载入什么类型
var movie:* = _loader.content;
// 获得颜色值,显示为0
trace( movie.getColor( ) );
// 设置颜色
movie.setColor( 0xFF0000 );
}
}
}

LoaderExample.swf 的代码完成了与被载入swf进行交互,有两个重要步骤:
监听init 事件
通过content属性访问载入的swf。

当外部的swf载入完成并进行初始化时就会激活init 事件,只有激活了该事件之后才可控制,否则就会出现运行时错误。

要控制外部载入的swf文件,必须先得到它的引用,这可通过Loader类的content属性获得。上面的例子中loader.content指向外部swf引用。如果loader 变量不可用,还可通过event.target.content得到Loader的content属性。

content 属性是只读的,返回DisplayObject类型对象。在LoaderExample.swf 代码中,movie变量类型为*,实际上也可以指定为DisplayObject。

ExternalMovie.swf被载入后,它有两个public 方法可以使用,如果调用不存在的方法则会抛出ReferenceError 异常。

getColor( ) 方法返回ExternalMovie.swf 中园的颜色,The setColor( ) 方法改变园的颜色,这里我们设置为红色。

加支付宝好友偷能量挖...


评论(0)网络
阅读(157)喜欢(0)flash/flex/fcs/AIR