PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : statemachine


pate33
20.09.2006, 12:46
Hi,

hab hier grad ein kleines Problem. Ich moechte mehrere Status in einen Datum unterbringen. Momentan habe ich das Datum wie folgt aufgebaut:

#_#_#_#_#, wobei # jeweils eine Zahl von 0-x sein kann.

Das ganze hab ich dann bei _ getrennt und in ein Feld zur Verarbeitung und Abfrage gelegt. Leider ist das gerade bei Aenderungen sehr schwierig, da ich zuerst die Zahl abfragen, aendern und wieder zurueckspeichern muss.

Gibt es da simplere Methoden?

Ich programmiere das ganze in ActionScript, also bitte Bitverschiebung oder aehnliches. ;)

Vielen Dank


mnemonic
20.09.2006, 12:59
Ääähm... warum willst Du das unbedingt in ein "Datum" packen?
Ich finde, solche Bitschiebe-Maskier-Aktionen tragen nicht unbedingt zur Lesbar- und "Debugbarkeit" bei.

Du könntest genausogut eine Struktur anlegen und bequem auf deren Elemente zugreifen:
var status = new Object();
staus.bar = "foo";
...


Natürlich wäre es auch ein Möglichkeit sowas in eine Klasse zu kapseln...

Quantumseeker
20.09.2006, 14:24
mit "Datum" meint er nur die Einzahl von "Daten". Ein Datum, viele Daten.
Das könnte also durchaus eine Struktur oder ein Bitstring sein, je nachdem :)

pate33
20.09.2006, 14:36
Exakt. Datum ist das singular von Daten. ;)

Das mit der Klasse funktioniert leider nicht, da ich das ganze auf dem Flash Media Server in einem SharedObject speichern moechte.

mnemonic
20.09.2006, 14:48
Danke für den kleinen Exkurs, beantwortet aber nicht meine Frage. :)

Dann halt andersrum...


#_#_#_#_#, wobei # jeweils eine Zahl von 0-x sein kann.

Wie gross kann "x" sein?

mnemonic
20.09.2006, 14:59
Das mit der Klasse funktioniert leider nicht, da ich das ganze auf dem Flash Media Server in einem SharedObject speichern moechte.
Also ich hab mal nen Blick in die Doku geworfen und wenn
var so:SharedObject = SharedObject.getLocal("userHighScore");
so.data.highScore = new Number();
so.flush(); funktioniert, sollte auch
var so:SharedObject = SharedObject.getLocal("myState");
so.data.state = new Object();
so.data.state.bar = "foo";
so.flush(); funktionieren.

Allerdings muss ich zugeben, dass ich mit dem Media Server noch nichts gemacht hab. Wo bekommt man den her?

pate33
20.09.2006, 15:02
http://www.adobe.com/products/flashmediaserver/

Dev-Version ist kostenlos. Kommerziell kostet das ding aber ordentlich. OpenSource Alternative waere Red5 Media Server.

Werd das mit der Klasse mal ausprobieren. Danke

pate33
20.09.2006, 15:04
Ich finde keine Frage?

Die Wertigkeit von "x" ist bei den ersten beiden Feldern undefiniert, aber ich rechne mit einem maximum von 99. Ansonsten liegt "x" zwischen 0 und 9.

Danke

pate33
20.09.2006, 15:10
hmm, das mit Object() funktioniert wohl nur bei den lokalen SharedObjects, nicht bei den server-seitigen. :(

Aber ich denke fuer die 5 Werte koennte ich auch 5 Variablen im SharedObject anlegen ... warum auch unnoetig kompliziert machen, mit einer state-machine :D.

mnemonic
20.09.2006, 21:31
hmm, das mit Object() funktioniert wohl nur bei den lokalen SharedObjects, nicht bei den server-seitigen. :(

Sicher?
Versuch mal was á la:
var so = SharedObject.getLocal("myState");
var data = so.data;
for(var prop in data) {
trace("data." + prop + " = " + data["prop"]);
} nachdem Du ein Object gespeichert hast.
Manchmal muss man nur ein wenig rumprobieren.


Aber ich denke fuer die 5 Werte koennte ich auch 5 Variablen im SharedObject anlegen ... warum auch unnoetig kompliziert machen, mit einer state-machine :D.
Kleine Brötchen backen hat sich bei AS seeeeehr bewährt. ;)

pate33
20.09.2006, 21:39
ich habe nun einige Versionen durchprobiert, aber ich kann keine zweite Hierarchiestufe im SharedObject anlegen. Ist aber auch egal, da es mit den 5 Variablen ganz gut funktioniert. :)

Ist uebrigens recht interessant, was man so mit dem Media Server alles anstellen kann. ;)

mnemonic
20.09.2006, 21:41
Ich werde das Teil die Tage mal genauer unter die Lupe nehmen.

Scheint aber alles in allem eine witzige Sache zu sein.

pate33
20.09.2006, 21:43
falls du eine moeglichkeit findest, die interne Client ID vom Server zu bekommen, sag mir bescheid. Dann kann ich meinen ID Generator rausschmeissen. :)

Viel Spass damit