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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
关于FLASH教程:SWF间的双向通信的所有评论