我希望使用远程SharedObject,因此我创建了一个简单的脚本来测试这些技术。当我将以下代码作为两个SWF实例运行时,两个实例都输出1,这是不正确的,因为第二个实例应该输出2。
import flash.net.SharedObject;
import flash.events.SyncEvent;
var nc:NetConnection;
var so:SharedObject;
nc = new NetConnection();
nc.client = { onBWDone: function():void{} };
nc.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus);
nc.connect("rtmp://localhost:1935/live");
var t = new TextField();
addChild(t);
function onNetStatus(event:NetStatusEvent):void{
if(event.info.code == "NetConnection.Connect.Success"){
so = SharedObject.getRemote("shObj",nc.uri);
so.connect(nc);
if (!(so.data.total > 0 && so.data.total<1000)) {// undefined
so.data.total=1;
} else so.data.total=2;
t.text=so.data.total;
}
}
我错过了什么吗?我是否需要对Flash或Red5进行一些特殊设置?我需要创建一个特殊目录吗?我必须使用特殊事件监听器吗?任何人都可以为我更正代码吗?
(2014年4月9日)
当我使用如下所示的事件监听器时,我得到了两个实例的空白屏幕,这很奇怪,因为我预计至少第二个屏幕会显示&#39; 2&#39;。有人可以解释一下这种行为吗?
import flash.net.SharedObject;
import flash.events.SyncEvent;
var nc:NetConnection;
var so:SharedObject;
nc = new NetConnection();
nc.client = { onBWDone: function():void{} };
nc.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus);
nc.connect("rtmp://localhost:1935/live");
var t = new TextField();
addChild(t);
function onNetStatus(event:NetStatusEvent):void{
if(event.info.code == "NetConnection.Connect.Success"){
so = SharedObject.getRemote("shObj",nc.uri);
so.addEventListener(SyncEvent.SYNC,syncHandler);
so.connect(nc);
so.setProperty("total",2);
}
}
function syncHandler(event:SyncEvent):void{
if (so.data.total) {
t.text = so.data.total;
}
}
答案 0 :(得分:2)
基本上,对于共享对象的使用,我建议将作业分成三个单独的部分。
附加事件侦听器并连接到共享对象
function onNetStatus(event:NetStatusEvent):void
{
if(event.info.code == "NetConnection.Connect.Success")
{
so = SharedObject.getRemote("shObj",nc.uri);
so.addEventListener(SyncEvent.SYNC,syncHandler); //add event listener for Shared Object
so.connect(nc);
}
}
完成事件处理程序方法以反映共享对象值
的更改/* This function is called whenever there is change in Shared Object data */
function syncHandler(event:SyncEvent):void
{
if(so.data.total) //if total field exists in the Shared Object
trace(so.data.total);
}
更改共享对象中的数据:
在此处使用共享对象的setProperty
方法。当您需要更改值时(可能是按钮单击或发生某个事件时)调用此方法
/* This function writes values to the Shared Object */
function changeValue(newValue:String)
{
so.setProperty("total",newValue);
}