• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Alle definierten Variablen und Funktionen speichern

Status
Für weitere Antworten geschlossen.

Durek

Neues Mitglied
Hallo ;-)
ich habe vor einigen Tagen ein Spiel per JavaScript & Ajax erstellt. Dieses Spiel speichert die aktuellsten Geschehnisse in Variablen. Als Beispiel:
Code:
/** Maps **/
maps = new Array();
maps['1'] = new Array('1');
maps['2'] = new Array('2');

/** Geblockte Koordinaten M|X|Y **/
blockedcoords = new Array('1|2|2','1|2|3','1|2|4','1|2|5','1|2|6','1|3|6','1|4|6','1|5|6','1|6|6','1|7|6','1|7|5','1|8|5','1|9|5','1|11|5','1|12|5','1|12|4','1|12|3','1|12|2','1|11|2','1|10|2','1|9|2','1|8|2','1|8|3','1|8|4','2|2|15','2|1|14','2|1|13','2|1|12','2|1|11','2|1|11','2|1|10','2|1|9','2|1|8','2|1|7','2|1|6','2|1|5','2|1|4','2|1|3','2|2|2','2|3|2','2|4|2','2|5|2','2|6|2','2|7|2','2|8|2','2|9|2','2|10|2','2|11|2','2|12|2','2|13|2','2|14|2','2|15|2','2|16|2','2|17|2','2|18|2','2|19|2','2|20|2','2|21|2','2|22|2','2|23|2','2|24|2','2|24|3','2|24|4','2|24|5','2|24|6','2|24|7','2|24|8','2|24|9','2|24|10','2|24|11','2|24|12','2|24|13','2|24|14','2|23|15','2|22|15','2|21|15','2|20|15','2|19|15','2|18|15','2|17|15','2|16|15','2|15|15','2|14|15','2|13|15','2|12|15','2|11|15','2|10|15','2|9|15','2|8|15','2|7|15','2|6|15','2|5|15','2|4|15','2|9|9','2|10|9','2|11|9','2|9|8','2|10|8','2|11|8');

/** Geschehnisse beim Übertreten eines Feldes oder bei Auslösung durch "Enter" **/
/** Scripts werden aus "scripts/events/map_x_y.js" eingelesen **/
enterevents = new Array('2|10|9');
touchevents = new Array('2|23|3','1|10|4');

/** Teleportpunkte **/
portcoords = new Array();
/** MAP 1 **/
portcoords['1|10|4'] = new Array(2,3,15,1,1); // Map|X|Y = Map,X,Y,Sichtrichtung(0=bleibt,1=oben,2=links,3=unten,4=rechts), Übergangseffekt (0 = keiner)
/** MAP 2 **/
portcoords['2|3|16'] = new Array(1,10,5,3,2);

Nun sieht man den Array "touchevents" diese werden ausgeführt wenn man diese Koordinaten mit der Spielfigur überquert. Als Beispiel die Datei "1_10_4.js":
Code:
userdisabled = 1;
setTimeout("moveperson('user','1');",1300);
setTimeout("moveperson('user','1');",1600);
setTimeout("moveperson('user','1');",1900);
setTimeout("alert('Hallo\\nin diesem großen Raum befinden sich Events zum Testen.\\nGanz oben rechts in der Ecke ist ein Berührungsevent. Laufe über es, um es zu aktivieren.\\nDie beiden Schwerter auf dem Tisch sind Aktivierungsevents: du aktivierst sie, indem du Enter drückst während du sie anguckst.\\n\\nDiese Nachricht erscheint nur einmal! Beim Erneuten Betreten des Hauses wird sie nicht erscheinen!');",2200);

setTimeout("userdisabled=0;delete_from_array('1|10|4',touchevents);",2400);
meine Funktion "delete_from_array" löscht den Wert "1|10|4" aus dem Array "touchevents" und hebt somit das Berührungsevent auf.

Nun möchte ich auch das Speichern ermöglichen... das bedeutet ich muss alle Arrays, definierte Funktionen und Variablen als JavaScript-Quelltext per Ajax an ein PHP-Dokument übergeben welches eine Datei in meinen Ordner "saves" speichert... Bspw. würde ich das per $_REQUEST übergeben.

Kurz gesagt:
Kann ich aktuelle, nicht gleich beim Aufruf definierte Variablen, Funktionen oder Arrays als neuen JavaScript-Quelltext bspw. in einer Variable ablegen, die ich dann übermittele?

Ich hoffe es war verständlich und mir kann geholfen werden, ich bedanke mich schon mal :grin:


edit: achja CSS-Informationen müssten auch übergeben werden, wenn es möglich wäre :D
 
Zuletzt bearbeitet:
Werbung:
Du suchst wahrscheinlich JSON. Und da dir die Variablen bekannt sind , welche du übergeben willst, sowie mögliche CSS-Eigenschaften, musst du nicht mal loopen.

Was auch auffällt, dass deine Struktur scheiße (auf gut deutsch) ist:
  • Erstmal benutzt du nicht-numerische Indizes für Arrays, das ist sogar gefährlich
  • Dann benutzt du Koordinaten, die sich einfacher als Array abbilden ließen

//edit
Das hier zeigt dir ein Spiel (auf Basis von <canvas>) und auch ordentliche Strukturen:
Teil zwei kam heute pünktlich zu deinem Thema. Weiß gar nicht, ob ich das posten darf, schließlich ist W3D bei uns verboten.
 
Zuletzt bearbeitet:
Hallo, nein einige Variablen und Funktionen werden mir nicht bekannt sein, wie doof es auch klingen mag^^

Du bist nicht der erste, der sagt, dass meine Übersicht sehr schlecht ist... ich komme damit zwar zurecht aber ich sollte das dann mal überdenken^^

Die Links die du mir gegeben hast befassen sich aber eher in Richtung 3D wovon ich nicht mal wusste, dass man sowas überhaupt realisieren kann bzw. schon realisiert hat. Mein Spiel sieht zur Zeit so aus:
Testmap-Editor

zumindest ist die neuste Version noch nicht oben.
 
Werbung:
Ich frag mich, warum du Funktionen speicher willst, Funktionen erzeugt man doch nicht mal eben so.

Mir ging es auch nicht um um 3D, sondern generell um die Strukturen, mit denen die Karten, Sprites etc. definiert werden.

Bei deinem Spiel brauchst du auch nur Daten wie die aktuelle Koordinaten der Spielfigur und allgemeine Daten, wie Items, Spielfigur, Spielername/-id sowie Quests und sowas.

Z.B. stell ich mir das so vor:
Code:
{
    "playerId" : 1,
    "coords" : { x : 50, y : 100 },
    "items" : {
        "weapons" : [1,2,5,6],
        "armor" : [34,45,45]
    }
}
Sowas überträgst du als JSON und speicherst es auf dem Server, komprimiert und evtl. verschlüsselt. Natürlich musst du dir noch was ausdenken, damit man nicht schummeln kann.
 
ja aber dann gibt es sozusagen noch "switches" also Schalter, die wenn umgelegt in einer Abfrage von Bedeutung wären. Die Koordinaten auszulesen wäre nicht das Problem. Items gibt es noch nicht, ich habe das Spiel erstmal nur so "dahingeklatscht" aber diese würde ich dann bald einbauen und auch so speichern wie du es gegeben hast.

Ich lade bei Events ein JavaScript-Dokument dazu und in diesem wäre eine volle Flexibilität praktisch. Umso mehr ich darüber nachdenke stimmt es aber, dass die Funktionen da eher unnötig wären. Und gerade beim Verfassen des Textes kam mir eine Idee^^ "switches" als Array statt einzelne Variablen. Dann gibt es bspw. den switch mit dem Index 0 und denn schalte ich dann so an.
change_switch(0,1); 1=an; 0=aus; 2=Umschalten (wenn an, dann aus und umgekehrt). Ich probiere Heute dann mal was aus und melde mich noch einmal in einem Edit zu Wort, ob es nun geklappt hat oder nicht.

edit: ich habe es geschafft, danke^^
 
Zuletzt bearbeitet:
Status
Für weitere Antworten geschlossen.
Zurück
Oben