快速业务通道

FLASH教程:SWF间的双向通信

作者 佚名技术 来源 服务器技术 浏览 发布时间 2012-07-07

假设有一个主 SWf 名为 main.swf 加载一个名为 game.swf 的游戏模块:
1. main 里面使用 Loader 将 game.swf 加载进来;
2. 在 game 中定义 public function moveBall(speed:Number) 方法,用于开始游戏;
3. 在 main 里面使用类似 loader["content"].moveBall(speed) 的语句调用 game.swf 里面的方法;
4. game.swf 与 main.swf 通信的方法,可以使用 dispatchEvent 方法与 main.swf 通信,也可以继续使用上述方法。

下面请看示例:
1. 首先创建被调用的 game.swf:
package {
import Flash.display.Sprite;
import flash.events.Event;
import flash.system.Security;

public class Game extends Sprite {
private var ball:Sprite;
private var speed:Number;

public function Game() {
// 在 Flash IDE 中执行 Debug
Security.allowInsecureDomain("*");

if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}

private function init(e:Event = null):void {
removeEventListener(Event.ADDED_TO_STAGE, init);
ball = new Sprite();
ball.graphics.beginFill(0xFF0000);
ball.graphics.drawCircle(0, 0, 50);
ball.graphics.endFill();
addChild(ball);
ball.x = 50;
ball.y = stage.stageHeight / 2;
}

public function moveBall(speed:Number):void {
this.speed = speed;
addEventListener(Event.ENTER_FRAME, onGameLoop);
}

private function onGameLoop(e:Event):void {
ball.x += speed;
}

public function stopMove():void {
removeEventListener(Event.ENTER_FRAME, onGameLoop);
}
}
}
在这个类里创建了一个小球实例 ball,还提供了两个公开的方法 moveBall(speed) 和 stopMove(),用于控制小球的运动与停止。最后,编译该文件将生成好的 game.swf 放到应用服务器的根目录上(http://localhost/game.swf)。

2. 下面创建主程序,调用 game.swf 并与其通信
package {
import flash.display.Loader;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.net.URLRequest;
import flash.system.Security;

public class Main extends Sprite {
private var loader:Loader;

public function Main() {
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}

private function init(e:Event = null):void {
removeEventListener(Event.ADDED_TO_STAGE, init);

// 允许访问变量、对象、属性、方法等
Security.allowDomain("*");

loader = new Loader();
addChild(loader);

// 加载 http://localhost/game.swf 后面的参数用于防止缓存
loader.load(new URLRequest("http://localhost/game.swf?" + new Date().time));
loader.contentLoaderInfo.addEventListener(Event.INIT, onLoadComplete);
}

private function onLoadComplete(e:Event):void {
// 调用 game.swf 中的 moveBall(speed) 方法
loader["content"].moveBall(5);

// 点击舞台后调用 game.swf 中的 stopMove() 方法
stage.addEventListener(MouseEvent.CLICK, onClickStageHandler);
}

private function onClickStageHandler(e:MouseEvent):void {
loader["content"].stopMove();
}

}
}
主程序中先将 game.swf 加载进来,然后调用 game.swf 中的 moveBall(speed) 方法,并侦听在舞台发生点击事件后调用 game.swf 中的 stopMove() 方法。

3. game.swf 与 main.swf 通信方法:
调用的方法可以和 main.swf 调用

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号