# Level-Editor



## MOEP_BIBER (3. Jun 2011)

Hey Leute,
ich bin gerade mein erstes Jump n Run - Sidescroll Game zu programmieren und jetzt bin ich schön langsam soweit, dass ich mein erstes Level bauen will.

Wie geht man das mit dem Level-Editor am besten an?
Von Hand als Code schreiben, kommt für mich nicht in Frage, da ich denke der Aufwand für nen Level-Editor lohnt sich schon nach dem zweiten oder dritten Level.

Meine Idee war folgende:
ich merke mir die positionen von mousepressed und mousereleased und zeichne dort Rectangles und füge diese Rectangles in eine ArrayList ein.
Anhand dieser Rectangles bau ich dann mit irgendeinem GrafikProgramm n level.

Ist es intelligenter alles in Rechtecke mit gleicher Größe zu unterteilen und so weiterzumachen?
Wie haut das mit dem unterteilen dann hin?

MfG MOEP


----------



## SlaterB (3. Jun 2011)

was du mit Rectangles meinst ist ganz schön unklar, wenn das Thema einfach nur Level-Editor ist und niemand weiß ob es eine Landkarte, einen Gebäudegrundriss oder sonstwas in 2D oder 3D mit Bäumen, Autos oder Tomaten machen willst..,
wenn man aber an Tetris-Steine denkt, dann kommt die Aufteilung in Rechtecke bzw. Quadrate schon ziemlich gut hin,
kannst ja vorher auf karierten Papier aufmalen welche Gegenstand wieviele Kästchen belegt

derart einfache Strukturen mit dann exakter Platzierung auf Kooridinaten in der Welt sind für den Anfang gewiss leicher zu implementieren als vieles andere,
ja, unbedingt


----------



## Kr0e (3. Jun 2011)

Jenachdem welches Format du benutzt, wäre "Tiled" etwas für dich. DAs ist ein TileMap-Editor mit einem offenen Speicherstandard...


----------



## MOEP_BIBER (3. Jun 2011)

Hm, ich will mir lieber selber nen Level-Editor schreiben.
Nur damit ich das auch mal gemacht hab 
Funktioiert auch schon soweit, jedoch weiß ich noch nicht wie ich alles in so gleich große Blöcke unterteilen kann.
Hat jemand nen Tipp/Link für mich?


----------



## Ralph-Uwe (3. Jun 2011)

Hi,

schreibe ein Klasse, die alle notwendigen Parameter eine Objektes enthält.
Fülle Instanzen der Klasse mit Deinen Werten.
speichere alle Objekte eines Levels in einer Collection.
Schreibe die Collection auf Festplatte ... fertig ist Level 1.

So habe ich es bei meinem Spiel gemacht.

Viel Erfolg


----------



## Apo (3. Jun 2011)

Was weißst du nicht genau? Ich habe für mein Jump'n'Run auch einen einfachen Editor geschrieben. Und der ist auch Tilebasiert mit einer bestimmten Größe. Und sowas wie "Röhren" nehmen dann halt 2x2 Tiles ein. Oder wie meinst du das?


----------



## MOEP_BIBER (3. Jun 2011)

Ja genau so ähnlich wollte ich das auch machen.
Kann man sich irgendwo deinen source code anschaun?
Bzw das mit den tiles und evtl der code wo die collisions gecheckt werden, da mein collisioncheck verdammt kompliziert und nicht allzu verlässlich ist.

Vielen Dank schonmal.

ps: Wie lange hast du für das game gebraucht?
Also nur das game ohne das mit den bots usw.
Ich schreib mittlerweile seit ner Woche an meinem ersten Game und hab noch nicht einen Gegner implementiert^^


----------



## Kr0e (3. Jun 2011)

Eine Woche ist nicht viel, wenn man noch nicht so viel Erfahrung hat...

Ich weiß allerdings nicht so richtig, wo dein Problem ist... Was ist denn an deiner Kollisionserkennung so komplex ?
Eigentlcih ist das ziemlich simpel, sonfern du jetzt keine Collision-Trees brauchst  -> Bei mehr als 1000 Objekten z.B.^^

Mach es doch iwie so:


```
Shape[] shapes;

for(int i = 0; i < shapes.length-1; i++) 
    for(int j = i+1; j < shapes.length; j++)
        if(shapes[i].collidesWith(shapes[j]) {
             shapes[i].onCollision(shapes[j]);
             shapes[j].onCollision(shapes[i]);
        }
```


Fertigt... onCollision sollen callback Methoden sein, damit die Shapes auch merken, wenn sie kollidieren. Und ob 2 Polygone sich schneiden kannst du mit der Shape-Klasse von java.awt.* machen...


Gruß,

Chris


----------



## MOEP_BIBER (3. Jun 2011)

Ich mach das Ganze mit Rectangles.intersect();
Mein Problem besteht darin, dass ich wissen muss, WIE er kollidiert.
Also ob er rechts, links, oben oder unten kollidiert.
Das hab ich ziemlich kompliziert mit Rectangle.getX() und Rectangle.getWidth() usw usw. in sehr vielen if-Verschachtelungen gemacht.
Geht das irgendwie simpler?
Also dass man weiß welche Seiten kollidieren?


----------



## Kr0e (3. Jun 2011)

Hi,

eigentlich brauch man dafür Vektoren und MAtrizen... Damit kann man leicht anhand der Mittelpunktdifferenzen die Seiten die betroffen sind ermitteln...


----------



## MOEP_BIBER (3. Jun 2011)

Gibts irgendwo Codebeispiele bzw Tutorials dazu?


----------



## Kr0e (3. Jun 2011)

Das ist Mathe 12. Klasse... Vlt auf iwelchen Matheseiten... Stichworte: Vektorrechnung und MAtrizenrechnung (Lineare Algebra!)


----------



## MOEP_BIBER (5. Jun 2011)

Ich kann Vektorrechnung genau so wie Matritzenrechnung, aber ich weiß nicht inwiefern mir das mit meinem CollisionTest weiterhelfen soll.
Codebeispiel wäre sehr hilfreich =)


----------



## Kr0e (5. Jun 2011)

Naja nimm doch einfach die einfache Methode... das ist immer die Beste 


Schau mal, du hast doch deine "intersects"-Methode. So, damit kannst du feststellen, wenn etwas kollidiert, dann würde ich einfach die Geschwindigkeit nehmen, von deinem Objekt. Das ist ja quasi ein 2d Vektor, welcher dir die Richtung, die dein Objekt sich bewegt, weist  

Immer nur Codebeispiele wirkt unkreativ. Wenn du ein bissel Ahnung von MAthe hast und bereits von Rectagnle.intersects() bescheid weißt, dann ist doch der Rest ein Kinderspiel...


----------

