2017-09-08 2 views
0

J'ai créé une application de test pour tester des objets partagés. J'ai trois fla, deux jeux et un fla principal pour appeler d'autres fichiers SWF.Je ne peux pas afficher l'objet partagé un autre SWF sur AIR

principal 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; 


} 


} 

Jeu 2 enregistrer le numéro.

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(); 

Et le jeu 1 pour afficher le nombre partagé, mais cela ne fonctionne pas.

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(); 

Jeu 2 rincée le nombre parfait, mais je ne vois pas sur le jeu 1 swf.I obtenir NaN message.How dois-je faire pour afficher les données sur le jeu 2.

** MISE A JOUR * ****

· J'utilise 2 swf dans le même App.I vérifier la connexion locale et il dit:

"support de profil AIR: Cette fonction est prise en charge sur tous les systèmes d'exploitation de bureau et sur tout l'air Appareils TV, mais n'est pas pris en charge sur les appareils mobiles.Vous pouvez tester le support lors de l'exécution à l'aide de e Propriété LocalConnection.isSupported. Pour plus d'informations sur la prise en charge des API dans plusieurs profils, consultez la rubrique Prise en charge des profils AIR. "

Donc, si je ne peux pas utiliser sur mobile ce ne est pas nécessaire, est-il?

· J'essaie de vider la valeur sur la principale fla (goster)

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

bsa4.data.toka = tsiko.peko; 






var flashstatus:String=bsa4.flush(); 

· J'utilise cette déclaration écouteur d'événement sur la principale fla à.

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; 

}

· Je peux saisir la valeur (tsiko.peko) sur fla principale, mais je ts pas saving.Also quand je vérifie le dossier partagé ..

C: \ Users \ miko \ AppData \ Roaming \ goster \ # magasin local SharedObjects

je peux voir le dossier 3 swf.

game2.swf goster.swf game1.swf

Que dois-je faire maintenant?

Répondre

1

Note latérale. Si vous configurez la communication entre deux fichiers SWF, l'objet partagé peut être l'une des pires solutions à utiliser. Si ces fichiers SWF sont dans la même application, utilisez simplement des classes partagées ou quelque chose. Pire, mais encore viable: utilisez LocalConnection, il fournit la gestion des événements à l'arrivée des données.

Mais bon, eh bien. Des conditions doivent être remplies pour que deux fichiers SWF différents utilisent le même objet partagé.

  • Ils doivent exister dans le même domaine de sécurité. Fondamentalement, vous ne pouvez pas partager le même objet partagé entre des fichiers SWF chargés à partir de domaines différents. Ce n'est pas un problème pour l'application AIR.
  • Utilisez le même deuxième argument: var SO: SharedObject = SharedObject.getLocal ("goster", "/"); Si ce n'est pas le cas, il utilise le chemin SWF complet par défaut, c'est pourquoi vos deux fichiers SWF accèdent à des objets partagés distincts.
  • Synchronisation. Évidemment. Vous ne pouvez pas lire les données d'un objet partagé qui n'y sont pas encore écrites.
  • Synchronisation lecture/écriture. Je suis à peu près certain que Flash Player, une fois connecté à l'objet partagé local, ne surveillera pas ses changements d'exécution, donc vous ne pourrez probablement pas l'ouvrir et, par exemple, attendre les changements. Vous devez toujours ouvrir-write-flush-le fermer et l'ouvrir-lire-le fermer respectivement pour vous assurer d'accéder aux données réelles.
-1

L'objet partagé est unique pour le fichier SWF. Pour avoir un objet partagé unifié, vous devez le gérer uniquement dans un fichier SWF (peu importe si le conteneur ou le fichier swf chargé), à condition qu'il ne soit qu'un seul exécutant le vidage réel. Vous pouvez ensuite exposer une méthode que l'autre SWF appellera pour accéder à l'objet partagé.