一、开发交互式的媒体应用程序
1.共享对象(Shared objects)
----SharedBall example
这个SharedBall example创建了一个临时的远程共享对象.类似于多人游戏.当一个用户移动这个球,其他用户都能看得到.
我将这个例子改成了Flex版本的了,贴上代码先:
1.新建Flex项目SharedBall
2.新建ActionScript文件:MyBall.as
package {
import mx.core.UIComponent;
public class MyBall extends UIComponent {
public function MyBall() {
init();
}
public function init():void {
graphics.beginFill(0xff0000);
graphics.drawCircle(0, 0, 20);
graphics.endFill();
}
}
}
3.初始化应用程序
private function initApp():void {
mb = new MyBall();
mb.x = 200;
mb.y = 200;
addChild(mb);
nc = new NetConnection();
addEventListeners();
nc.connect("rtmp://localhost/SharedBall");
}
4.添加事件监听器
private function addEventListeners():void {
nc.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
mb.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
mb.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
}
5.当连接服务器成功的时候在netStatus handler中创建远程共享对象
switch(event.info.code) {
case "NetConnection.Connect.Success" :
trace("Connect Success");
so = SharedObject.getRemote("ballPosition", nc.uri, false);
so.connect(nc);
so.addEventListener(SyncEvent.SYNC, syncHandler);
break;
}
6.当一个用户移动小球的时候,使用setProperty()方法在远程共享对象里面改变球的位置:
private function onMouseMove(event:MouseEvent):void {
mb.x = mouseX;
mb.y = mouseY;
if(so != null) {
so.setProperty("x", mb.x);
so.setProperty("y", mb.y);
}
}
当远程共享对象被更新的时候,它就会发出sync事件
7.写一个sync事件的handler处理更新所有客户端小球位置
private function syncHandler(event:SyncEvent):void {
mb.x = so.data.x;
mb.y = so.data.y;
}
打开程序运行多个浏览器,当拖动其中一个小球的时候,其它小球都会改变位置。