zoukankan      html  css  js  c++  java
  • Flash/Flex学习笔记(15):FMS 3.5之远程共享对象(Remote Shared Object)

    FMS中的“远程共享对象”可以让多个Client端的flash应用共享同一个全局对象,并且当客户端中的任何一个改变该对象时,系统会自动将该对象回发到FMS服务器,同时FMS服务器也会将该对象重新广播到所有客户端。

    说得更通俗一点:如果二个机器上浏览这种flash应用,在一台机器上所做的操作,将会在另一台机器同步体现出来。

    这个能干嘛? 电子教室(比如老师在一台机器上演示教学,其它所有机器上能同步刷新),互动游戏(比如:游戏中的情侣可以在异地同时装修自己的房子),需要在服务端保存记录的聊天室应用(把聊天室的聊天记录当成一个共享对象即可)...

    下面的代码出处FMS的官方示例,在一台机器上拖动小球的位置,另一台机器上的小球也会同步移动

    var nc:NetConnection = new NetConnection();
    var so:SharedObject;
    
    nc.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
    
    // sharedBall是舞台上的一个小球实例
    sharedBall.addEventListener(MouseEvent.MOUSE_DOWN, pickup);
    sharedBall.addEventListener(MouseEvent.MOUSE_UP, place);
    sharedBall.addEventListener(MouseEvent.MOUSE_MOVE, moveIt);
    sharedBall.addEventListener(MouseEvent.MOUSE_OVER,mouseOverHandler);
    sharedBall.addEventListener(MouseEvent.MOUSE_OUT,mouseOutHandler);
    
    function mouseOverHandler(e:MouseEvent) {
    	Mouse.cursor=MouseCursor.HAND;
    }
    
    function mouseOutHandler(e:MouseEvent) {
    	Mouse.cursor=MouseCursor.ARROW;
    }
    
    nc.connect("rtmp://localhost/SharedBall");//连接到FMS
    
    function netStatusHandler(e:NetStatusEvent) {
    	switch (e.info.code) {
    		case "NetConnection.Connect.Success" :
    			trace("Congratulations! you're connected");
    			so=SharedObject.getRemote("ballPosition",nc.uri,false);
    			so.connect(nc);
    			so.addEventListener(SyncEvent.SYNC, syncHandler);
    			break;
    		default :
    			break;
    	}
    }
    
    function pickup(e:MouseEvent):void {
    	e.target.startDrag();
    }
    
    function place(e:MouseEvent):void {
    	e.target.stopDrag();
    }
    
    function moveIt( e:MouseEvent ):void {
    	if (so!=null) {
    		//移动时,修改共享对象so的属性值
    		so.setProperty("x", sharedBall.x);
    		so.setProperty("y", sharedBall.y);
    	}
    }
    
    
    function syncHandler(e:SyncEvent):void {
    	//so有一个对象data,用来保存用户设置的属性值 
    	trace(so.data.x);
    	trace(so.data.y);
    	//程序首次进入时,共享对象还没有值,所以要判断设置初始值 
    	if (so.data.x==undefined||so.data.y==undefined) {
    		sharedBall.x = 50;
    		sharedBall.y = 50;
    	} else {
    		sharedBall.x=so.data.x;
    		sharedBall.y=so.data.y;
    	}
    }
    
    作者:菩提树下的杨过
    出处:http://yjmyzz.cnblogs.com
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    matlab矩阵中如何去掉重复的行;如何找到相同的行,并找到其位置
    Coursera 机器学习 第9章(下) Recommender Systems 学习笔记
    机器学习基石笔记1——在何时可以使用机器学习(1)
    Coursera 机器学习 第9章(上) Anomaly Detection 学习笔记
    matlab安装过程的被要求的配置程序
    jdk环境变量配置
    Coursera 机器学习 第8章(下) Dimensionality Reduction 学习笔记
    Coursera 机器学习 第8章(上) Unsupervised Learning 学习笔记
    Coursera 机器学习 第7章 Support Vector Machines 学习笔记
    linux服务器---squid限制
  • 原文地址:https://www.cnblogs.com/yjmyzz/p/1687947.html
Copyright © 2011-2022 走看看