演示文件源码下载:
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 626原文件下载地址: http:/ ... -
asp+access+as3+flash留言本教程——flash篇
2010-04-10 14:15 634[1b] 需要源文件留下email [/1b] [1b]成业作 ... -
TOMCAT+JSP+ACCESS+FLASH连接数据库
2010-04-10 14:15 587很多新人问FLASH和数据库连接的方法,这里介绍一下,后台可 ... -
Flash站技术应用(7)—FileReference路径获取问题
2010-04-10 14:14 627关于flash后台通信问题,大家先看下 火山的Flash+a ... -
Flash全站的技术应用-Flash也能播放wmv,wma
2010-04-10 14:14 694前言 Flash能播放除flv,m ... -
flash中NetConnection与NetStream知识整理
2010-04-10 09:34 838NetConnection只有一个connect方法,NetS ... -
flv制作工具大全
2010-04-10 09:34 712Collected links to Flash Vid ... -
FLV播放器汇总
2010-04-10 09:34 692http://www.dengjie.com/weblog/c ... -
flash视频文件自动的在服务器端转换成FLV文件的FFMPEG的编译方法
2010-04-10 09:33 719在闪吧看别人的帖子看 ... -
flash视频文件自动的在服务器端转换成FLV文件的FFMPEG的编译方法
2010-04-10 09:33 730在闪吧看别人的帖子看 ... -
flash9/as3访问WebService的暂时替代方法
2010-04-09 12:31 1153在前面写了 flash9/as3访问WebService的的方 ... -
《as3中文帮助(PDF&CHM)》下载
2010-04-09 12:31 1421官方的下载地址(PDF格式): ActionScript 3. ... -
《as3中文帮助(PDF&CHM)》下载
2010-04-09 12:30 987官方的下载地址(PDF格式): ActionScript 3. ... -
AS3数据存取方式效率比较
2010-04-09 12:30 580通常我们存取数据有如下几种方式:Array, Object, ... -
AS3数据存取方式效率比较
2010-04-09 12:30 606通常我们存取数据有如下几种方式:Array, Object, ... -
一个AS3 socket解码设计的错误思路
2010-04-09 08:08 622调试游戏确实是一项磨人的工作。难怪很多业内人都喜欢说“好游戏是 ... -
一个AS3 socket解码设计的错误思路
2010-04-09 08:08 661调试游戏确实是一项磨人的工作。难怪很多业内人都喜欢说“好游戏是 ... -
SWF间的双向通信
2010-04-09 08:07 632演示文件源码下载: swfs_communication.r ... -
Flash相册加载图片完毕等比缩放的类
2010-04-09 08:07 691每次做相册类的flash的 ... -
鸽子动态画法
2010-04-08 08:10 813禽类的画法:鸽子动态。来一起分析下鸽子的运动方式。[1b](未 ...
相关推荐
Java与Flash之间的socket通信是一个基于TCP/IP协议的双向通信机制。在Java端,我们可以创建一个ServerSocket监听特定端口,等待客户端(这里是Flash)连接。当Flash客户端建立连接后,Java端可以读取SWF文件并将其...
1. **JavaScript通信**:使用Flash External Interface (ExternalInterface) API,SWF文件可以与JavaScript进行双向通信。这使得你可以控制SWF的行为,如播放、暂停、跳转等,也可以根据SWF的事件更新HTML页面状态。...
1. **双向通信**:Delphi可以控制Flash组件的行为,如播放、暂停、停止动画,改变显示内容等;同时,Flash也可以向Delphi发送消息,例如用户在Flash中的操作结果,这样可以实现数据的实时反馈。 2. **事件处理**:...
Adobe Flash Player提供了一个名为`ExternalInterface`的API,允许Flash内容与JavaScript进行双向通信。通过`ExternalInterface.addCallback`方法,ActionScript可以注册一个函数,使得JavaScript可以通过调用该函数...
通过创建LocalConnection实例,SWF文件可以发送和接收消息,实现双向通信。 二、实现SWF本地通讯的步骤 1. 创建LocalConnection对象:在发送方SWF中,首先需要创建一个LocalConnection对象,并指定一个唯一的名字,...
2、将html和swf放在你的站点根目录,然后用网址访问html(比如通常是http://127.0.0.1/asjs.html)即可看到效果!如果直接用浏览器打开html看不到最终效果的 3、flash给js发送消息,实际上只用到了: if ...
通过这个实例,开发者可以学习到如何在VB环境中集成Flash内容,并实现双向通信。 关于标签“vb Flash 通信”,这表明本实例关注的重点是VB与Flash间的接口和通信机制。VB通过ActiveX控件与Flash交互,具体来说,...
1. ExternalInterface API:这是Flash Player提供的一种机制,允许Flash内容与包含它的HTML页面进行双向通信。在Flex中,我们可以使用`ExternalInterface.addCallback`方法注册一个ActionScript函数,使其可以在...
5. **通信协议**:串行通信有许多不同的协议,如UART(通用异步收发传输器)、USART(通用同步/异步收发传输器)、SPI(串行外围接口)、I²C(集成电路间通信)和USB(通用串行总线)等。这些协议规定了如何组织...
External Interface是AS3(ActionScript 3)中内置的功能,允许Flash内容与宿主环境(通常是网页)中的JavaScript进行双向通信。Bridge技术则包括Flash的本地连接(LocalConnection)和自定义的通信协议,用于...
在Flash中,Socket类提供了低级别的网络通信能力,允许应用程序通过TCP/IP协议与服务器进行双向通信。在`Main.as`文件中,你可以找到Flash客户端的Socket实例化和相关事件处理代码。当创建一个Socket对象后,需要...
### VB与Flash的双向交互详解 #### 一、引言 在早期的软件开发领域,Visual Basic (简称VB) 和 Flash 是两种非常流行的开发工具。VB 主要用于 Windows 平台上的应用程序开发,而 Flash 则是制作网页动画、游戏等...
2. LocalConnection:另一种通信方式是使用LocalConnection对象,它可以实现在同一台机器上不同Flash对象间的通信。在某些情况下,当ExternalInterface不可用或不适合时,LocalConnection可以作为替代方案。 3. ...
这通常涉及到创建一个COM对象,定义一些方法,这些方法可以在ActionScript中调用,从而实现双向通信。 4. **数据交换**:Flash和VC之间需要传递数据,例如,Flash可能需要获取用户在VC程序中的设置,或者向VC报告...
PollingDuplex是一种模拟双向通信的机制,客户端定时轮询服务器以获取新数据。 8. **学习资源** 包含的`flex_3_with_java.pdf`可能是详细的教程文档,涵盖了Flex与Java通信的基础知识和技术细节。`flexdemo.rar`...
- **ExternalInterface API**: Flex SDK提供了`ExternalInterface`类,允许ActionScript(Flex的编程语言)代码与JavaScript进行双向通信。通过`addCallback`方法注册回调函数,使JavaScript可以调用Flex中的方法,...
这个例子可能展示了如何使用Flash和JavaScript进行双向通信,比如实现按钮点击事件的交互、数据传递或者控制Flash播放等。尽管现代Web开发更多地依赖HTML5和WebGL,但理解Flash与JavaScript的通信仍然对理解Web历史...
标题中的“中文_-_英文双向翻译WEB服务 .NET实例”指的是使用.NET框架开发的一个Web应用程序,该程序能够实现中文和英文之间的双向翻译功能。这通常涉及到自然语言处理(NLP)和机器翻译(MT)的技术,可能利用了第...
WebSocket是一种在客户端与服务器之间建立长连接的协议,它提供了双向通信的能力,使得数据可以在两者之间实时、高效地传输。然而,WebSocket协议是基于HTML5的,因此在一些老版本的浏览器,特别是像IE8这样的旧版...
这种Java与Flash的通信方式主要依赖于Socket接口,它允许双向通信,可以用于实现更复杂的应用场景,如文件上传、下载、实时聊天等功能。需要注意的是,由于Flash的安全策略,跨域通信可能需要设置Flash Player的策略...