
gwt-flash-bridge
gwt flash gridge 是什么?
gwt flash bridge 在adobe flex bridge 的基础上,借助gwt 提供的 javascript overlay type 和jsni 对其进行了封装,实现了在gwt 环境下,使用java语言 访问和使用flash平台上的功能.
gwt flash bridge 有什么用?
flash 提供了一些标准的浏览器平台没有提供的特性,例如对视频,音频,socket 等的支持,举个例子,gmail 中的附件上传功能就是使用flash实现的(右键点击上传附件的链接按钮). 还有大名鼎鼎的swf upload也是使用flash实现.
通过gwt flash bridge, 可以在基于gwt 的应用中灵活地集成flash平台一些优秀的功能. 这里有一个在gwt flash bridge基础上实现的上传demo
实际上,gwt flash bridge 及其基础 flex ajax library 非常灵活,不仅仅局限于访问标准的flash api, 任何flash/as3/flex 中的对象都可以很容易地"export" ,然后在gwt 中使用.
从编程角度讲你可以: * 在flash 端"export" 一个"root" 对象, 并通过root 对象的get和set export任何你希望导出的对象 ``` package { import flash.display.Sprite; import bridge.FABridge; public class EmptyFABridgeSWF extends Sprite { private var externalBridge:FABridge; public function EmptyFABridgeSWF() { externalBridge = new FABridge(); externalBridge.rootObject = this; }
}
}
* 在gwt端,访问 root 对象,进而访问到任何在flash 端被导出的对象.
FABridge.get().getInstance("bridge name").root()
* 在gwt 创建新的flash 对象,例如 `DisplayObject`, `Sprite`, `Graphcis`,`Sound`
FABridge.get().getInstance(bridgeName).create("flash class name")
* gwt 中 获得对象后访问对象的 get 和set定义的属性以及对象上的方法,这些对象的接口和原始的flash 对象几乎完全一致.例如:
soundReq = URLRequest.createURLRequest(bridgeName);
soundReq.setUrl(url);
sound = Sound.createSound(bridgeName);
sound.load(soundReq);
channel = sound.play(0, 1);
```
创建了一个 flash 中的 URLRequest,设置mp3 url, 创建一个Sound 对象,加载指定的mp3 文件,然后开始播放.
使用flash 的graphics api 画图:
SpriteWrapper sw = new SpriteWrapper(SpriteDemo_bridgeName, true);
final Sprite s = sw.getNativeAS3Obj();
Graphics g = s.getGraphics();
g.beginFill(0xFF0000);
g.lineStyle(2, 2);
g.drawRect(-100, -100, 200, 200);
g.endFill();
root.addChild(s);
s.setX(300);
s.setY(200);
* 在gwt 中监听和处理flash 平台的事件.例如:
Stage stage = root.getStage();
StageWrapper stagew = new StageWrapper(SpriteDemo_bridgeName, false);
stagew.setNativeAS3Obj(stage);
RotateHandler handler = new RotateHandler(s, speed);
stagew.addHandler(handler, Event.ENTER_FRAME);
获得flash 中的舞台对象, 然后创建一个事件处理器,最后把事件处理器和舞台的"enterFrame" 事件(每秒24帧的动画事件)关联.
项目当前的状态
flash 平台有一个庞大的api,完全在gwt 中实现这些api是否有必要值得商榷,目前项目主要实现了用于集成二者的框架以及一些特定的功能,包括: *
FileReference
文件上传 * 基础的DisplayObject
/Sprite
, 验证能够创建显示对象以及接收flash 平台的事件 *Sound
, 播放mp3 文件
如何开始?
下载安装 gwt 1.6.4, 下载安装netbeans6.5.1
项目源码和demo源码都在svn 中,使用svn checkout后让两个项目文件在同一个文件夹中,然后用netbeans打开,修改对gwt相关jar文件的引用即可.
在"downloads" 中有一个demo 的打包下载,下载后使用netbeans 打开,修改库引用, 在build.xml 中选择 "hosted" 即可运行.
如果你有什么意见和建议,请通过email和我联系
Project Information
- License: GNU Lesser GPL
- Content License: Creative Commons 3.0 BY
- 10 stars
- svn-based source control