Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 15-05-2005, 15:32   #1 (permalink)
Neuer User
 
Benutzerbild von zillion42
 
Registriert seit: Oct 2004
Beiträge: 65
Array erstellen...

Hallo nochmal,

Ich hab da diesen Code:
PHP-Code:
if(messageObj.firstChild.nodeName == "P") {
   var 
Pilot messageObj.firstChild.firstChild.nodeValue;
   var 
Tmp_Data messageObj.childNodes[1].firstChild.nodeValue;  
   
ConvertData Tmp_Data.split(":");
   
inLatitudeGrad ConvertData[2];
   
inLongitudeGrad ConvertData[3];
   
latlong2xz (inLongitudeGrad,inLatitudeGrad);
   
Data ConvertData[0]+":"+ConvertData[1]+":"+returns+":"+ConvertData[4];

Also dieses message Objekt ist immer so:

<P>Pilot</P><M>Message</M>

und kommt alle 5 Sekunden, dann aber leider gleich ein paar mal. Also jede 5. Sekunde kommen auf einmal 1-40 davon.

Dann wandel ich da noch mir der Funktion
latlong2xz (inLongitudeGrad,inLatitudeGrad);
Daten um und bau sie in einen Neuen String mit dem Namen Data...

Jetzt hätte ich gerne für jeden Piloten ein kleines Array das jeweils die letzten 5 Data Messages fasst und ein kleines Array das die Liste der Piloten darstellt... Ich stell mich nur irgendwie heute sau blöd an...

Danke im vorraus...
zillion42 ist offline   Mit Zitat antworten
Alt 15-05-2005, 16:28   #2 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg / Stuttgart
Beiträge: 4.338
also erstmal denke ich, kann das mit dem Manipulieren (latlong2xz) klappen, da du ja nur Strings übergibst. Wenn du diese in der Funktion änderst, ändert sich außen nichts.
Du muss die geänderten Daten zurückgeben, und dann außen wieder zuweisen, oder du übergibst direkt an die Funktion das Array ConvertData, dann kannst du darin Änderungen vornehmen.
Kleines Beispiel:
ActionScript:
  1. var str:String = "Hallo ich heiße Janosch";
  2. var words:Array = str.split(" ");
  3.  
  4. // erster Versuch
  5. function changeName(name:String):Void {
  6.     name = "anders";
  7. }
  8.  
  9. changeName(words[3]);
  10. trace(words.join(" ")); // Hallo ich heiße Janosch
  11. // Kommentar: der Funktion wird nur eine Kopie von words[3] übergeben
  12.  
  13. // zweiter Versuch
  14. var name:String = words[3];
  15.  
  16. function newName():String {
  17.     return "anders";
  18. }
  19.  
  20. name = newName();
  21. trace(words.join(" ")); // Hallo ich heiße Janosch
  22. // Kommentar: in name steht nur eine Kopie von words[3]
  23.  
  24. // dritter Versuch
  25. words[3] = newName();
  26. trace(words.join(" ")); // Hallo ich heiße anders
  27. // Kommentar: das geht
  28.  
  29. // wieder rückgängig machen
  30. words = str.split(" ");
  31.  
  32. // vierter Versuch
  33. function changePhrase(phrase:Array):Void {
  34.     phrase[3] = "anders";
  35. }
  36. changePhrase(words);
  37. trace(words.join(" ")); // Hallo ich heiße anders
  38. // Kommentar: geht auch
  39.  

Zu deiner eigentlichen Frage (auch wenn eine Menge Informationen fehlen...):
Du könntest es z.B. in etwa so machen:
ActionScript:
  1. var a:Object = new Object();
  2.  
  3. function agentExists(agent:String, obj:Object):Boolean {
  4.     var i;
  5.     for(i in obj) {
  6.         if(i == agent) return true;
  7.     }
  8.     return false;
  9. }
  10.  
  11. function messageReceived(agent:String, message:String, obj:Object):Void {
  12.     if (agentExists(agent, obj)) {
  13.         obj[agent].push(message);
  14.     } else {
  15.         obj[agent] = new Array();
  16.         obj[agent].push(message);
  17.     }
  18. }
  19.  
  20. messageReceived("janosch", "hallo", a);
  21. messageReceived("bert", "hallo zurück", a);
  22. messageReceived("janosch", "was geht", a);
  23. messageReceived("gerta", "sprichst du mit mir?", a);
  24. messageReceived("bert", "nicht mit dir", a);
  25. // Ergebnis lässt sich nach kompilieren mit [strg] + [alt] + [v] ansehen
  26.  

Dann musst du die Funktion messigeReceived nur noch aus deinem obigen Codestückchen mit den richtigen Daten aufrufen.
Das immer nur die letzten 5 Nachrichten zu lesen sind, darfst du noch selbst implementieren
__________________
»Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!)
Janoscharlipp ist offline   Mit Zitat antworten
Alt 15-05-2005, 19:05   #3 (permalink)
Neuer User
 
Benutzerbild von zillion42
 
Registriert seit: Oct 2004
Beiträge: 65
Hallo,

Danke erstmal für die lange Antwort... Ich weiss jetzt nicht genau ob ich verstanden habe...
Aber die
function agentExists(agent:String, obj:Object):Boolean ();
und die
function messageReceived(agent:String, message:String, obj:Object):Void
sehen schonmal irgendwie brauchbar aus.
Ich galube aber ich brauche noch ziemlich lange bis ich da durchblicke....

Nochmal zurück zu meiner jetztigen Perspektive...
Ich sehe da meine gebastelte variable Data. Diese funktioniert übrigens und ist am Ende eigentlich schon das Endergebnis. Fast könnte ich sie wieder mit split auf : zerteilen und die Informationen direkt mit duplicate oder attach movie auf ein kleines Flugzeug symbol übertragen und in regelmässigen Abständen eine ._x und ._y position auf meiner Karte zuweisen...

Ich würde sie eigentlich nur gerne vorher noch in ein array schreiben das so heisst wie der Pilot dem die Daten gehören und das bis zum [4] element füllen bevor ich wieder bei [0] anfange.
Zudem würde ich vorher natürlich gerne rausfinden obs das Array mit dem Piloten Namen schon gibt und in diesem Fall natürlich daran anhängen bis ich die [4] stelle erreicht habe und dann wie schon gesagt wieder bei [0] anfangen...
Kann das so schwer sein ?

Reicht da nicht irgendwie sowas wie:

pseudo quatsch:


Pilot.Array = new Array

Wie Gross = pilot.size

if wie Gross > 4

Pilot.conacat(Data)[Wie Gross+1]


schon völlig aus ? Bin am ende noch nich ganz so schnell, hätte es nur gerne übersichtlich und einfach...

Danke und Gruss

zillion
zillion42 ist offline   Mit Zitat antworten
Alt 15-05-2005, 19:50   #4 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg / Stuttgart
Beiträge: 4.338
Hallo,
ich habe irgendwie immer agent statt pilot geschrieben..., vielleicht verwirrt dich das, denn eigentlich habe ich alles so gemacht, wie du es beschreibst, nur eben noch ohne das Überlaufen bei 5 Nachrichten nicht.
Hier nochmal eine verbesserte Version:
ActionScript:
  1. // hier werden die Piloten gespeichert
  2. var pilotes:Object = new Object();
  3.  
  4. // gibt zurück ob im obj ein Pilot namens pilot existiert
  5. function pilotExists(pilot:String, obj:Object):Boolean {
  6.     var i;
  7.     for(i in obj) {
  8.         if(i == pilot) return true;
  9.     }
  10.     return false;
  11. }
  12.  
  13. // speichert eine Nachricht von pilot mit dem Inhalt message ins Object obj
  14. function messageReceived(pilot:String, message:String, obj:Object):Void {
  15.     var p:Array;
  16.     if (pilotExists(pilot, obj)) {
  17.         p = obj[pilot];
  18.         if(p.length > 4) {
  19.             p = new Array();
  20.         }
  21.     } else {
  22.         p = obj[pilot] = new Array();
  23.     }
  24.  
  25.     p.push(message);
  26. }
  27.  
  28. messageReceived("janosch", "hallo", pilotes);
  29. messageReceived("bert", "hallo zurück", pilotes);
  30. messageReceived("janosch", "was geht", pilotes);
  31. messageReceived("gerta", "sprichst du mit mir?", pilotes);
  32. messageReceived("bert", "nicht mit dir", pilotes);
  33. // Ergebnis lässt sich nach kompilieren mit [strg] + [alt] + [v] ansehen
  34.  

Und um es zu verwenden schreibst du hinter
ActionScript:
  1. if(messageObj.firstChild.nodeName == "P") {
  2.    var Pilot = messageObj.firstChild.firstChild.nodeValue;
  3.    var Tmp_Data = messageObj.childNodes[1].firstChild.nodeValue
  4.    ConvertData = Tmp_Data.split(":");
  5.    inLatitudeGrad = ConvertData[2];
  6.    inLongitudeGrad = ConvertData[3];
  7.    latlong2xz (inLongitudeGrad,inLatitudeGrad);
  8.    Data = ConvertData[0]+":"+ConvertData[1]+":"+returns+":"+ConvertData[4];
  9. }
oder eben hinter das hier, bzw. hinter deine neue Version:
ActionScript:
  1. // ...
  2. Data = ConvertData[0]+":"+ConvertData[1]+":"+returns+":"+ConvertData[4];
  3. messageReceived(Pilot, Data, _root.pilotes);
__________________
»Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!)
Janoscharlipp ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 10:49 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele