我无法在 AIR 上显示另一个 SWF 共享对象

I can't display Shared object another SWF on AIR

我已经为测试共享创建了一个测试应用程序 objects.I 有三个 fla,两个游戏和一个主 fla 用于调用其他 swf 文件。

主要 FLA

import tsiko;

var mypipi:Loader = new Loader();                     // create a new instance of the Loader class
var myurl:URLRequest = new URLRequest("game2.swf"); // This is game 2

var mypipi2:Loader = new Loader();                     
var myurl2:URLRequest = new URLRequest("game1.swf"); //This is game 1 in this case both SWFs are in the same folder 



wh3gna.addEventListener(MouseEvent.CLICK, dinsvslov);

function dinsvslov(event:MouseEvent):void
{


    mypipi.load(myurl);                                     // load the Game 2
addChild(mypipi); 


}





stage.addEventListener(Event.ENTER_FRAME,bibisa);
function bibisa(oly:Event) {


    //if game 2 done than call the game 1 and remove game 2


    if(tsiko.sansangelme==true){

        mypipi2.load(myurl2);                                     // load the SWF file
addChild(mypipi2);



        mypipi.unloadAndStop();

        tsiko.sansangelme=false;


}


}

游戏2存号

import tsiko;
import flash.net.SharedObject;
import flash.events.NetStatusEvent;

tsiko.peko=555;

var bsa4:SharedObject = SharedObject.getLocal("goster");

bsa4.data.tok = tsiko.peko;



bsa4.flush();


var flashstatus:String=bsa4.flush();
if(flashstatus !=null){
    switch(flashstatus){
case SharedObjectFlushStatus.PENDING:
trace("waiting")
break;
case SharedObjectFlushStatus.FLUSHED:
trace("great saved")
break;
}
}

tsiko.sansangelme=true; // Goto main menu 


stop();

和游戏 1 显示共享号码,但它不起作用。

import tsiko;
import Turn;
import flash.net.SharedObject;
import flash.events.NetStatusEvent;


var bsa1:SharedObject = SharedObject.getLocal("goster");

var myno:Number=0;


myno=bsa1.data.csok;


tipo.text = String(myno);


stop();

游戏 2 完美刷新了数字,但我在游戏 1 上看不到 swf.I 得到 NaN message.How 我应该如何在游戏 2 上显示数据。

**更新 *****

· 我在同一个 app.I 中使用 2 swf 检查本地连接,它说:

" AIR 配置文件支持:此功能在所有桌面操作系统和所有 AIR for TV 设备上均受支持,但在移动设备上不受支持。您可以在 运行 时间使用 LocalConnection.isSupported 属性。有关 API 跨多个配置文件支持的详细信息,请参阅 AIR 配置文件支持。“

所以如果我不能在手机上使用它就不需要了,是吗?

·我尝试在 main fla(goster) 上刷新值

var bsa4:SharedObject = SharedObject.getLocal("goster");

bsa4.data.toka = tsiko.peko;






var flashstatus:String=bsa4.flush();

·我在主平面上的事件监听器中使用了这个语句。

if(tsiko.skordangelme==true){
    Skoryukle.unloadAndStop();

    trace(tsiko.peko + "Last score");
    bsa4.flush(); //So if game completed and user come back the main menu then save the score.

    tsiko.skordangelme=false;

}

·我可以在主平面上捕捉到值(tsiko.peko),但是当我检查共享文件夹时它不是saving.Also..

C:\Users\miko\AppData\Roaming\goster\Local 商店#SharedObjects

我可以看到3个swf文件夹。

game2.swf goster.swf game1.swf

我现在应该做什么?

共享对象对于 SWF 是唯一的。为了拥有一个统一的共享对象,您应该只在一个 SWF 中处理它(不管是容器还是加载的 swf),只要它只是一个执行实际刷新的对象即可。然后您可以公开一个方法,其他 SWF 将调用该方法来访问共享对象。

旁注。如果您要在两个 SWF 之间建立通信,那么共享对象可能是最糟糕的解决方案之一。如果这些 SWF 在同一个应用程序中,只需使用 shared 类 之类的。更糟,但仍然可行:使用 LocalConnection,它提供数据到达时的事件处理。

但是哦,好吧。两个不同的SWF使用同一个共享对象是有条件的。

  • 它们应该存在于同一个安全域中。基本上,您不能在从不同域加载的 SWF 之间共享同一个共享对象。这对 AIR 应用程序来说不是问题。
  • 使用相同的第二个参数:var SO:SharedObject = SharedObject.getLocal("goster", "/"); 如果你不这样做,它默认使用完整的 SWF 路径,这就是为什么您的两个 SWF 访问不同的共享对象。
  • 同步。明显地。您无法从共享对象中读取任何尚未写入其中的数据。
  • Read/write同步。我很确定 Flash Player 一旦连接到本地共享对象,就不会在运行时监视其更改,因此您可能无法打开它并等待更改。您始终需要分别打开-写入-刷新-关闭它和打开-读取-关闭它以确保您正在访问实际数据。