我无法在 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 一旦连接到本地共享对象,就不会在运行时监视其更改,因此您可能无法打开它并等待更改。您始终需要分别打开-写入-刷新-关闭它和打开-读取-关闭它以确保您正在访问实际数据。
我已经为测试共享创建了一个测试应用程序 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 一旦连接到本地共享对象,就不会在运行时监视其更改,因此您可能无法打开它并等待更改。您始终需要分别打开-写入-刷新-关闭它和打开-读取-关闭它以确保您正在访问实际数据。