b-free
Goto Top

AS3 Dokument reload mit sharedObject reload.

Hi Leute,

Ich habe mir ein kleines AS3 dingsdabums gebastelt, was mir anzeigt welche Tutorials ich schon besucht und beendet habe und welche neu dazugekommen sind.

Momentan sieht es so aus:
// Frame 2
stop ();
var done:SharedObject;

reload.buttonMode = true;
Zurücksetzen.buttonMode = true;
WurzelTR2.buttonMode = true;
yfx2.buttonMode = true;

done = SharedObject.getLocal('beautifycode', "/", false);  

if (done.data["WurzelTR"] == 1) {  
WurzelTR2.visible = true;
WurzelTR1.visible = true;
}
else {
WurzelTR2.visible = false;
WurzelTR1.visible = false;
	}
	
if (done.data["yfx"] == 1) {  
yfx1.visible = true;
yfx2.visible = true;
}
else {
yfx1.visible = false;
yfx2.visible = false;
	}
	
Zurücksetzen.addEventListener(MouseEvent.CLICK, Zurücksetzen);

function Zurücksetzen(event:MouseEvent):void
{
	done = SharedObject.getLocal('beautifycode', "/", false);  
	done.data["WurzelTR"] = "NICHTS";  
	done.data["yfx"] = "NICHTS";  
	done.flush();
	gotoAndPlay (1);
}

reload.addEventListener(MouseEvent.CLICK, reloadin);

function reloadin(event:MouseEvent):void
{
	gotoAndPlay (1);
}

WurzelTR2.addEventListener(MouseEvent.CLICK, WurzelTR_reset);
yfx2.addEventListener(MouseEvent.CLICK, yfx_reset);

function WurzelTR_reset(event:MouseEvent):void
{
	done = SharedObject.getLocal('beautifycode', "/", false);  
	done.data["WurzelTR"] = 0;  
	done.flush();
	gotoAndPlay (1);
}

function yfx_reset(event:MouseEvent):void
{
	done = SharedObject.getLocal('beautifycode', "/", false);  
	done.data["yfx"] = 0;  
	done.flush();
	gotoAndPlay (1);
}

Das Problem:
der Button "reload" (Zeile 41 - 46) springt auf Frame 1. von da aus geht es weiter auf Frame 2, alles sollte Neu geladen werden. aber wird es nicht!!!

Jemand vielleicht ein Tipp??? Hab ich was falsch gemacht???

Gibt es vielleicht so etwas wie:
documentReload (); 
???

Freue mich über jeden Kommentar und Jede (hilfreiche) Antwort!!!

Tschau
B-Free

Content-ID: 212978

Url: https://administrator.de/contentid/212978

Ausgedruckt am: 22.11.2024 um 10:11 Uhr

colinardo
colinardo 31.07.2013 aktualisiert um 11:33:38 Uhr
Goto Top
Hallo B-Free,
sorry aber du verlangst hier von uns das wir hellsehen können. Z.b. weiß man nicht welches Steuerelement du aktualisieren möchtest. Bitte sieh dir erst mal die AS3-Referenz an.
Eventuell wäre ein spezialisiertes Forum für dich die bessere Wahl (z.B.:http://www.flashforum.de/forum/actionscript-3/)

Grüße Uwe
B-free
B-free 31.07.2013 aktualisiert um 11:43:00 Uhr
Goto Top
Hi!

1.) a.
Ich dachte mir das so, dass ich die werte die in
done.data["WurzelTR"]  
und
done.data["yfx"]  
neu geladen werden.

b.
In den Referenzen von Adobe habe ich leider nur sehr wenig gefunden, obwohl ich intensiv gesucht habe. face-sad

2.) Mein eindruck von diesem Forum (da war ich vor Administrator.de) ist, das es nur noch ca. 4 aktive mitglieder gibt. face-sad.
deshalb bin auch auf Admin.de umgestiegen!


Tschau
B-Free
colinardo
colinardo 31.07.2013 aktualisiert um 12:00:46 Uhr
Goto Top
mach die Zuweisung der Daten an das SharedObject in dieser Form:
done.data.WurzelTR = 0;
steht übrigens hier in der Referenz.
B-free
B-free 31.07.2013 um 13:01:35 Uhr
Goto Top
Die Zuweisung hab ich ja schon gemacht. nur in einer anderen swf Datei! (sagen wir bla.swf)

jetzt wird in der Datei (bla2.swf) eine if abfrage gemacht, wo der wert
done.data["WurzelTR"]  
abgefragt wird. ein objekt wird daraufhin sichtbar, oder unsichtbar gemacht (auch in bla2.swf).

jetzt wird der wert wieder von bla.swf verändert.

daraufhin soll, wenn man in der bla2.swf auf "reload" klickt der wert erneut geladen werden und darauf hin das objekt wieder sichtbar/unsichtbar machen. WAS ER ABER NICHT MACHT!!!

der wert wird nicht neu geladen!


face-sad
B-free
colinardo
colinardo 31.07.2013 aktualisiert um 15:50:34 Uhr
Goto Top
OK verstehe jetzt,
das Problem ist das unterschiedliche SWF-Dateien sich jeweils eine gecachte Version des SharedObject anlegen auf die sie zugreifen. Das Problem und eine Lösung sind hier beschrieben: http://www.calculator-tab.com/blog/2008/08/accessing-a-local-shared-obj ...
Du musst also eine Klasse erstellen die das SharedObject lädt und wieder verwirft. Diese Klasse bitte in eine Separate Datei mit der Endung *.as speichern und in Flash den SWF-Dateien zuordnen.
Diese könnte z.B. so aussehen:
package  {
	import flash.net.SharedObject;
	public class SO {

		private var so:SharedObject;
		public function setValue(id:String,val:String){
			load_so();
			so.data[id] = val;
			unload_so();
		}
		public function getValue(id:String){
			load_so();
			var retString:String = so.data[id];
			unload_so();
			return retString;
		}
		
		private function load_so():void{
			so = SharedObject.getLocal('beautifycode','/',false);  
		}
		private function unload_so():void{
			so.flush();
			so = null;
		}

	}
}
dann greifst du in Zukunft einfach so auf den Inhalt des SharedObjects zu (den Rest macht ja die Klasse SO):
//Instanz-Object der neuen Klasse erstellen
var done:SO = new SO;

// Inhalt setzen
done.setValue("WurzelTR","Hier der Wert");  

//Inhalt abfragen
var s:String = done.getValue("WurzelTR");  

Grüße Uwe
Gelöste Beitrage bitte auch als solche markieren.Danke.
B-free
B-free 31.07.2013 um 15:40:21 Uhr
Goto Top
Erstmal Danke!

in das mit dem Paket muss ich mich noch reinfummeln. ansonsten sieht das gut aus face-smile

die Sache mit dem Inhalt abfragen muss ich mir noch genauer angucken...


Tschau
B-free

ps. Ich lass es erstmal noch ungelöst...
colinardo
colinardo 31.07.2013 aktualisiert um 15:44:49 Uhr
Goto Top
hier noch eine Demo dafür im Flash CS6 Format zum Download
damit sollte es dann klarer sein !
B-free
B-free 01.08.2013 aktualisiert um 08:46:44 Uhr
Goto Top
Danke!

aber eine Sache noch:

Zitat von @colinardo:

Diese Klasse bitte in eine Separate Datei mit der Endung *.as speichern und in Flash den SWF-Dateien zuordnen.

und wie bitte mache ich das???


Danke!
B-free
colinardo
colinardo 01.08.2013 um 09:13:07 Uhr
Goto Top
Schau mal in die Demo-Datei. Du erstellst mit Flash ein neues Klassendokument und gibst der Datei den Namen SO.as (der Name ist wichtig und muss gleich wie der Klassennamen benannt werden) . Dann passt du den Code an deine Bedürfnisse an und fügst ihn in die Klassendatei ein. Die Datei sollte im gleichen Pfad wie die Flash-Projektdatei liegen, so erkennt Flash diese automatisch und du kannst sie in deinem Projekt verwenden.
B-free
B-free 01.08.2013 um 10:33:30 Uhr
Goto Top
Danke! face-smile

so erkennt Flash diese automatisch und du kannst sie in deinem Projekt verwenden.

Automatisch? ich dachte irgendwo gelesen zu haben, dass man in den Dokumenteigenschaften irgendwas verändern musste. (oder so)??? kann aber auch was anderes gewesen sein.


Tschau!
B-free face-smile

ps. Ich glaube das mit der If abfrage:
 var s:String = done.getValue("WurzelTR");  
hab ich auch kapiert. man muss dan einfach abfragen
if (s == 1 /*z.B.*/) {
       blablabla ();
}
und dann geht das face-smile (hoffe ihr habt das verstanden was ich da an Kauderwelsch geschrabbelt hab face-wink )
colinardo
colinardo 01.08.2013 um 10:45:14 Uhr
Goto Top
Automatisch? ich dachte irgendwo gelesen zu haben, dass man in den Dokumenteigenschaften irgendwas verändern musste.
Nein, es reicht wirklich aus wenn es im selben Verzeichnis liegt. Nur wenn du die Datei an einem anderen Ort speichern möchtest musst du diesen Pfad in den Projekteigenschaften hinterlegen.

hab ich auch kapiert. man muss dan einfach abfragen if (s == 1 /*z.B.*/) {
und dann geht das
Korrekt verstanden .getValue('AbzufragenderWert') fragt einen Wert ab und .setValue('ZuändernderWert','Value') ändert einen angegebenen Wert auf Value.
B-free
B-free 01.08.2013 um 11:16:10 Uhr
Goto Top
DAAAANKEEEEE!


Hast mir Extrem geholfen!!!


face-smile face-smile face-smile face-smile face-smile

B-free