演示文件源码下载:
swfs_communication.rar
假设有一个主 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 调用 game.swf 一样,也可以使用事件调度,下面是事件驱动方法:
(1)定义 GameEvent.as 事件
package {
import flash.events.Event;
public class GameEvent extends Event {
public static const GAME_START:String = "game_start";
public static const GAME_OVER:String = "game_over"
public var score:uint;
public function GameEvent(type:String, score:uint = 0) {
this.score = score;
super(type);
}
}
}
(2)在 Game 中当调用 moveBall(speed) 方法时分发 GameEvent.GAME_START 事件:
dispatchEvent(new GameEvent(GameEvent.GAME_START));
在 Game 中当调用 stopMove() 方法时分发 GameEvent.GAME_OVER 事件:
dispatchEvent(new GameEvent(GameEvent.GAME_OVER, ball.x)); // 将小球的 x 坐标作为 GameEvent 的参数发出
(3)在 Main 中侦听这两个事件(当 game.swf 被加载进来后):
loader["content"].addEventListener(GameEvent.GAME_START, onGameStartHandler);
loader["content"].addEventListener(GameEvent.GAME_OVER, onGameOverHandler);
private function onClickStageHandler(e:MouseEvent):void {
loader["content"].stopMove();
}
private function onGameOverHandler(e:Object):void {
trace(e.score);
}
private function onGameStartHandler(e:Object):void {
trace(e.score);
}
请注意处理事件的类型不是 GameEvent 而是 Object,理论上应该是 GameEvent ,但是如果这样声明的话会出现“强制转换类型失败”,因此只能用 Object 来替代
本文转自:http://www.5uflash.com/flashjiaocheng/Flash-as3-jiaocheng/5223.html
发表评论
-
精美全Flash个人网站的制作全程解析
2010-04-10 14:15 614原文件下载地址: http:/ ... -
asp+access+as3+flash留言本教程——flash篇
2010-04-10 14:15 619[1b] 需要源文件留下email [/1b] [1b]成业作 ... -
TOMCAT+JSP+ACCESS+FLASH连接数据库
2010-04-10 14:15 575很多新人问FLASH和数据库连接的方法,这里介绍一下,后台可 ... -
Flash站技术应用(7)—FileReference路径获取问题
2010-04-10 14:14 612关于flash后台通信问题,大家先看下 火山的Flash+a ... -
Flash全站的技术应用-Flash也能播放wmv,wma
2010-04-10 14:14 678前言 Flash能播放除flv,m ... -
flash中NetConnection与NetStream知识整理
2010-04-10 09:34 821NetConnection只有一个connect方法,NetS ... -
flv制作工具大全
2010-04-10 09:34 690Collected links to Flash Vid ... -
FLV播放器汇总
2010-04-10 09:34 676http://www.dengjie.com/weblog/c ... -
flash视频文件自动的在服务器端转换成FLV文件的FFMPEG的编译方法
2010-04-10 09:33 700在闪吧看别人的帖子看 ... -
flash视频文件自动的在服务器端转换成FLV文件的FFMPEG的编译方法
2010-04-10 09:33 708在闪吧看别人的帖子看 ... -
flash9/as3访问WebService的暂时替代方法
2010-04-09 12:31 1138在前面写了 flash9/as3访问WebService的的方 ... -
《as3中文帮助(PDF&CHM)》下载
2010-04-09 12:31 1402官方的下载地址(PDF格式): ActionScript 3. ... -
《as3中文帮助(PDF&CHM)》下载
2010-04-09 12:30 968官方的下载地址(PDF格式): ActionScript 3. ... -
AS3数据存取方式效率比较
2010-04-09 12:30 567通常我们存取数据有如下几种方式:Array, Object, ... -
AS3数据存取方式效率比较
2010-04-09 12:30 591通常我们存取数据有如下几种方式:Array, Object, ... -
一个AS3 socket解码设计的错误思路
2010-04-09 08:08 601调试游戏确实是一项磨人的工作。难怪很多业内人都喜欢说“好游戏是 ... -
一个AS3 socket解码设计的错误思路
2010-04-09 08:08 649调试游戏确实是一项磨人的工作。难怪很多业内人都喜欢说“好游戏是 ... -
SWF间的双向通信
2010-04-09 08:07 620演示文件源码下载: swfs_communication.r ... -
Flash相册加载图片完毕等比缩放的类
2010-04-09 08:07 680每次做相册类的flash的 ... -
鸽子动态画法
2010-04-08 08:10 793禽类的画法:鸽子动态。来一起分析下鸽子的运动方式。[1b](未 ...
相关推荐
SWF之间通信、Flex与SWF之间通信、C#与SWF之间通信
Flex中SWF和其他SWF文件之间的通信原理。该案例中TestLocalConnection为主SWF文件加载了TestLocalConnectionReceiver.SWF,两者之间是在同一个域下的通信,工程代码编译路径需要下载者手动修改下。其他技术细节参见...
flash actionscript3 as3通信 教程 socket与服务器通信, 多个swf之间通信.zip
SWFPlayer带拖动条的SWF播放器SWFPlayer带拖动条的SWF播放器SWFPlayer带拖动条的SWF播放器SWFPlayer带拖动条的SWF播放器SWFPlayer带拖动条的SWF播放器SWFPlayer带拖动条的SWF播放器SWFPlayer带拖动条的SWF播放器SWF...
SWF插件SWF插件SWF插件SWF插件SWF插件SWF插件SWF插件SWF插件SWF插件SWF插件SWF插件SWF插件SWF插件SWF插件SWF插件SWF插件SWF插件SWF插件
今天花了一些时间整理出来了Swf 文件与JavaScript通信的示例,在此贴出供大家参考。 在ActionScript3.0与JavaScipt通信的时候需要用到ExternalInterface类。 “ExternalInterface”类是外部API,在ActionScript和...
多个swf的通讯,使用 LocalConnection 类可以创建一个 LocalConnection 对象,该对象可在一个 SWF 文件中或多个 SWF 文件间,调用另一个 LocalConnection 对象中的方法。
swf编辑器 swf编辑软件,swf编辑工具 swf编辑器 swf编辑软件,swf编辑工具 swf编辑器 swf编辑软件,swf编辑工具 swf编辑器 swf编辑软件,swf编辑工具 swf编辑器 swf编辑软件,swf编辑工具
swf爱是淡淡的点点滴滴滴滴滴滴滴滴滴滴滴滴滴滴滴滴滴滴
SWF Seeker是一个通用的SWF内存提取工具,可用于电子杂志,小游戏等的解密. 【功能介绍】 1.软件内置了最新的解密引擎,在同类软件中速度最高。 2、100%抓取到用户看到的任何形式封装的swf文件。 3.特有智能扫描模式,...
66.swf66.swf66.swf66.swf66.swf66.swf66.swf66.swf
有效的去除flash swf文件加密,使flash文件中的各种资源 可以提取编辑 有效的去除flash swf文件加密,使flash文件中的各种资源 可以提取编辑
swf加密 swf加密软件 完美加密SWF
swf播放软件swf播放软件swf播放软件swf播放软件swf播放软件swf播放软件swf播放软件
工工无可厚非 顶砖瓦 顶替在职要不得末定swf 播放器swf 播放器swf 播放器swf 播放器swf 播放器swf 播放器
swf播放器 能播放swf播放器 swf播放器
绝对可用!!!Encrypt flash swf 加密
编SWF软件编SWF软件编SWF软件编SWF软件
swf文件制作swf文件制作swf文件制作swf文件制作