# Leveleditor



## MrDeathly (16. Feb 2010)

Hallo Leute 
bin neu hier im Forum und will mich jetzt endlich mal schlau machen wie ich meinen leveleditor realisieren könnte ...
also meine eigentliche frage liegt nicht darin, wie ich des mit den klickevents und dem design blabla machen könnte sondern:
ich habs mir so überlegt wenn ich ein level dann gebaut hab wird es in ner txt datei gespeichert... diese wird dann eingelesen und aus diesem code dann an den genauen x und y koordinaten neue wand objekte etc. erstellt ... nur mein problem liegt jetz darin, dass ich nicht weiss wie ich sowas in meinen quelltext einbauen kann ... also wenn da jetzt 5 objekte drinnen stehen mit bestimmten koordinaten dass die dann auch von meinem programm erstellt und gemalt werden  ich weiss dass es ne IOStream bibl. gibt aber damit kann man ja eigentlich nur txt. einlesen in nem string speichern und dann wieder speichern oder printen aber ned in den quelltext einbauen oder?
hoffe ihr könnt mir helfen 

mfg Basti


----------



## Sanix (16. Feb 2010)

Dann kannst entweder halt jede Linie parsen und dann das String Token mit einer Liste von Objekten vergleichen. Oder du speicherst gleich das ganze Objekt (wahrscheinlich eine Liste bei dir) mittel serialisierung ab und liest es so wieder ein.


----------



## MrDeathly (16. Feb 2010)

hmm versteh ich ned wie du das meinst 
nochnie was von serialisierung gehört xD bin noch ein frischling ...
ich habs jetzt so gemacht dass ich einfach jede objekt dass ich brauche im konstruktor erstell ... aber die meisten machen es ja beispielsweise auch so dass die einen arraymachen und darin die leveldaten speicher :/ kann mir des wer erklären wie des geht ?
oder näher erklären wie ichs bei meiner methode machen könnte?


----------



## Steev (16. Feb 2010)

Hi,

serialisierung ist eigendlich eine Methode in Java ein Objekt zur Laufzeit abzuspeichern oder eben wieder zu laden. Also genau das was du brauchst.
Hier mal ein kleines, einfaches Beispiel zur Serialisierung in Java:
[Java]
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.ibjectInputStream;
import java.ibjectOutputStream;
import java.iutputStream;
import java.io.Serializable;

public class SerializedTest {
    public static void main(String[] args) throws Exception {
        YourClass yourObject = new YourClass();
        yourObject.yourValue1 = 111.222;
        yourObject.yourValue2 = 333.444;

        System.out.println("Before:" + yourObject.yourValue1 + ", " + yourObject.yourValue2);

        File file = new File("yourFile.txt");

        OutputStream os = new FileOutputStream(file);
        ObjectOutputStream oos = new ObjectOutputStream(os);
        oos.writeObject(yourObject);

        InputStream is = new FileInputStream(file);
        ObjectInputStream ois = new ObjectInputStream(is);

        yourObject = (YourClass) ois.readObject();

        System.out.println("After:" + yourObject.yourValue1 + ", " + yourObject.yourValue2);
    }
}

class YourClass implements Serializable {
    private static final long serialVersionUID = -7235058815237362499L; // Für die Serialisierung wird eine ID benötigt

    transient double yourValue1 = 123.456; // dieser Wert wird nicht mit abgespeichert weil -> transient
    double yourValue2 = 0; // dieser Wert wird abgespeichert
}
[/Java]

Wenn du noch Fragen hast, dann kannst du dich ja nochmal melden. ;-)

Gruß
Steev


----------



## Bleistift (16. Feb 2010)

Oder du überlegst dir welche Daten du speichern musst, um das Objekt darzustellen(bei einer Wand z.b. x- und y-Koordinaten der Endpunkte) und schreibst dann in eine Textdatei eine Zeile: wand(x1,y1,x2,y2)
Dann kann man die Datei Zeile für Zeile einlesen, eine Zeile zerlegen, mit den Daten ein Objekt erzeugen und das dann zu einer Liste hinzufügen. 
mfg Bleistift


----------



## Steev (17. Feb 2010)

@Bleistift:
Das hat natürlich im Gegensatz zur Serialisierung den Vorteil, dass man bei Änderungen an den Objekten auch noch alte Maps, die vor der Änderung erzeugt wurden, laden kann. Bei der Serialisierung bekommt man dann ja in der Regel eine Exception.


----------

