# Java2DGameEditor Entwicklung



## Polli86 (28. Aug 2009)

Hi erstmal,

ich wollte hier mal mein Projekt vorstellen und einige Meinungen, Feedback, Tipps etc
dazu einholen. 

Mal grundlegend geht es um einen 2D-Rpg-Designer der komplett in Java-progammiert ist.
Habe mich daran gewagt weil ich sehr gerne mit Java programmiere, durch dieses Projekt 
viele Erfahrungen sammeln wollte und ich in meinem 1.ten Ausbildungsjahr nichts besseres zu tun hatte 

Wollte mal eine kleine testversion bereitstellen (die wohl noch Lichtjahre von einem fertigen Produkt entfernt ist)
damit ich weiß ob die Funktionalitäten die es im Moment gibt auch klappen.
Hier mal der Link zum Tool:

http://barney85.kilu.de/downloads/GameEditor.jar

Infos zum starten:
- leider keine Executable-Jar wegen dem Erstellen von Dateien
also bitte entpacken und... ganz Böse die .bat ausführen 
- der Game-Modus ist schneller als Editor-Modus, 
für Multi-Core-User dürfte es auch noch flotter laufen 

könnt natürlich auch über die Konsole starten, bat ist keine Pflicht !!!

Wer nichts laden will kann sich hier zwei drei Bilder dazu anschauen:

http://barney85.kilu.de/

Vielleicht schaffen es ja ein paar Leute Maps zu erstellen und diese mal zu posten,
würde mich freuen 

Naja dann bedanke ich mich schonmal fürs Thread-lesen
beste Grüße Polli

PS: Idee entstand durch RPG-Editoren die leider nur auf Windows laufen...
      noch was vergessen ...
      danke an Quaxlis Tutorial, es hat mich in manch
      kniffligen Situationen weitergeholfen :toll:


----------



## Gastredner (28. Aug 2009)

Beim Start der .bat und dem Drücken des Buttons "Game" kommt folgender Stack Trace:

```
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
        at graphics.Ressources.loadMaps(Ressources.java:121)
        at graphics.Ressources.<init>(Ressources.java:88)
        at test.GamePanel.doInitzalisation(GamePanel.java:144)
        at test.GamePanel.<init>(GamePanel.java:131)
        at test.Test.actionPerformed(Test.java:105)
        at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
        at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
        at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
        at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
        at java.awt.Component.processMouseEvent(Unknown Source)
        at javax.swing.JComponent.processMouseEvent(Unknown Source)
        at java.awt.Component.processEvent(Unknown Source)
        at java.awt.Container.processEvent(Unknown Source)
        at java.awt.Component.dispatchEventImpl(Unknown Source)
        at java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.awt.Component.dispatchEvent(Unknown Source)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
        at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
        at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
        at java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.awt.Window.dispatchEventImpl(Unknown Source)
        at java.awt.Component.dispatchEvent(Unknown Source)
        at java.awt.EventQueue.dispatchEvent(Unknown Source)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.run(Unknown Source)
```

Beim Drücken des Buttons "Editor" erscheint hingegen folgender ST:

```
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
        at graphics.Ressources.loadMaps(Ressources.java:121)
        at graphics.Ressources.<init>(Ressources.java:88)
        at test.GamePanel.doInitzalisation(GamePanel.java:144)
        at test.GamePanel.<init>(GamePanel.java:131)
        at test.Test.actionPerformed(Test.java:92)
        at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
        at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
        at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
        at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
        at java.awt.Component.processMouseEvent(Unknown Source)
        at javax.swing.JComponent.processMouseEvent(Unknown Source)
        at java.awt.Component.processEvent(Unknown Source)
        at java.awt.Container.processEvent(Unknown Source)
        at java.awt.Component.dispatchEventImpl(Unknown Source)
        at java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.awt.Component.dispatchEvent(Unknown Source)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
        at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
        at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
        at java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.awt.Window.dispatchEventImpl(Unknown Source)
        at java.awt.Component.dispatchEvent(Unknown Source)
        at java.awt.EventQueue.dispatchEvent(Unknown Source)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.run(Unknown Source)
```

Die Screenshots sehen recht interessant aus. Tatsächlich hab ich selbst mal an ein ganz ähnliches Projekt gedacht, mich bisher allerdings nicht drangesetzt weil mir jetzt schon wieder klar ist, dass ich vermutlich zu viel auf einmal will und es daher in den Sand setze.
Was ist an weiteren Features noch geplant?


----------



## Polli86 (28. Aug 2009)

hi @ Gastredner, 

danke schonmal fürs probieren , hört sich stark nach einem Problem an
welches ich noch nicht entgegen wirken konnte.
Und zwar konnte ich leerzeichen in Ordner-namen nicht lesen...
heißt keine Dateien laden, 
hast du das Projekt vieleicht in EigeneDateien oder einem ähnlichen unter Dok und Einstellungen entpackt?!


----------



## Gastredner (28. Aug 2009)

Ja, genau das hab ich.
Ich probier es mal in einem anderen Ordner.

EDIT:
OKay, unter C: läuft es.
Erster Eindruck: Key-Erkennung muss verbessert werden. Wenn ich z. B. Pfeiltaste Links gedrückt halt und dann kurz Pfleiltaste Hoch drücke, dann muss der Charakter nach dem Lösen der zweiten Taste wieder nach Links laufen und eben nicht stehen bleiben.
Das Editor-Menü ist noch ein "wenig" überarbeitungsbedürftig - da wenig intuitiv - , allerdings dürfte das der sehr frühen Version geschuldet sein. Ich finde jedenfalls die Umsetzung der Tile-Leiste mit der Auswahl schon mal recht gelungen. Wüsste jetzt gerade, um ehrlich zu sein, nicht wie ich das so umsetzen sollte. Woaruf basiert dieses Element bei dir?
Nicht schlecht wäre es allerdings, würde man den Rahmen der ausgewählten Tiles bereits beim Ziehen sehen und nicht erst nach dem Loslassen der Maustaste.
Die Bedienung beim Setzen der Tiles ist ebenfalls ein wenig gewöhnungsbedürftig, aber ich denke mal, die gesamte Oberfläche ist derzeit noch längst nicht final und muss noch stark erweitert werden.


----------



## Evil-Devil (28. Aug 2009)

Für den Anfang nicht schlecht.
Was mich gestört hat ist die fehlende Möglichkeit TileEbenen auszublenden. Ich wusste somit nie genau in welcher Ebene ich arbeite. Auch wäre es toll mit einer leeren Map starten zu können 

Warte auf die nächste Version, dann würde ich mich auch zu einer Map hinreißen lassen.


----------



## Polli86 (28. Aug 2009)

freut mich das es funktioniert hat 
also wegen der Steuerung des Players habe ich mir auch schon gedanken gemacht
und habe zwei Code-Varianten ausprobiert, leider nicht mit großem Erfolg 
Im Moment läufts über einen Status-Wert der in den Key-Listener Methoden gesetzt wird.
Hast du/jemand hier ne Player-Steuerung gemacht, bin da offen für alles 

Die Tile-Leiste basiert erstmal auf den Tilesets, welche große Images sind. Diese werden in einem
JLabel als Icon angezeigt(War am einfachsten). Dann arbeite ich mit den 
Koordinaten des Bildes und speichere diese Koordinaten dann mit den 
Koordinaten des Zielortes in der Map ab. Dazwischen findet ne kleine Umrechnung statt das 
immer genau die linke, obere Ecke eines Tiles benutzt wird 

Ja die Oberfläche bedarf noch einiger Korrekturen , vor allem weil die Menü-Leiste auch irgendwann
mangels Platz und Übersichtlichkeit ausgedient hat 

Mir ist auch gerade aufgefallen das der Editor noch einige Ausgaben generiert... lol


----------



## Gastredner (28. Aug 2009)

Polli86 hat gesagt.:


> Hast du/jemand hier ne Player-Steuerung gemacht, bin da offen für alles


DIe Steuerung des Helikopters in Quaxlis erstem Tutorial besaß eine Steuerung, die das geforderte leisten kann, wenn ich mich nicht irre. Dort vielleicht mal einen Blick drauf werfen.



> Die Tile-Leiste basiert erstmal auf den Tilesets, welche große Images sind. Diese werden in einem
> JLabel als Icon angezeigt(War am einfachsten). Dann arbeite ich mit den
> Koordinaten des Bildes und speichere diese Koordinaten dann mit den
> Koordinaten des Zielortes in der Map ab. Dazwischen findet ne kleine Umrechnung statt das
> immer genau die linke, obere Ecke eines Tiles benutzt wird


Was mich hierbei eigentlich interessiert ist die Oberflächenkomponente. Wenn du schreibst, dass du JLabel benutzt: Zerschneidest du die Tilesets in gleichmäßige Teile, setzt jedes dieser Teile als Icon eines JLabels und ordnest die dann auf der Editor-Oberfläche an? Oder wie?


----------



## Evil-Devil (28. Aug 2009)

Wie kann man NPCs oder Animations-Tiles löschen? Jetzt hatte ich ne schöne Insel und lauter Dinge von der Default-Map herumstehen.


----------



## Polli86 (28. Aug 2009)

@Gastredner
also das Tileset im Editor wird komplett 
als Image angezeigt so wies auch im GFX Ordner liegt.
Da wird nichts zerschnitten 

@EvilDevil
Oh Npcs lassen sich IMO nur über den Ordner npcs löschen ... 
Die Animationen bestehen aus zwei Tiles, müssen mit nem 
leeren Feld, immer das linkeste oberste Feld im Editor, ersetzt werden... 

hm... da muss ich mir auch noch was einfallen lassen ;D


----------



## Steev (28. Aug 2009)

Hi,

ich habe deinen Editor auch gerade mal getestet. Bei dem Sound stimmt noch etwas nicht. Nach jeder Wiederholung des Liedes bleibt der letzte Ton des Liedes bestehen. Vieleicht stimmt da etwas mit dem Loopen nicht.


----------



## Gastredner (28. Aug 2009)

Polli86 hat gesagt.:


> @Gastredner
> also das Tileset im Editor wird komplett
> als Image angezeigt so wies auch im GFX Ordner liegt.
> Da wird nichts zerschnitten


Kannst du mir da mal ein Stückchen Code schicken? Die Umsetzung ist mir immer noch nicht ganz klar...


----------



## Polli86 (28. Aug 2009)

Hi,

also unter obigem Link ne neuere Version,

1. Ebenen höheren Ranges werden bei Bearbeitung ausgeblendet
2. Soundproblem beseitigt, jedenfalls bei mir 
3. Außerdem Steuerung geändert... gefällt mir nur mit dem schrägen laufen nicht ... ma gucken
4. Uuuuund keine vordefinierten Maps, Warps, Npcs...

@Gastredner 
- selbstredend geht das


----------



## Gastredner (28. Aug 2009)

Noch ein paar Dinge, die mir aufgefallen sind:
-Startposition: Die Startposition des Charakters ist noch fest bzw. nicht festlegtbar - weshalb der jetzt auf meiner kleinen Testkarte mitten in einem Block steht.
-Bug: Setzt man die Block-Attribute und wechselt danach von der Boden auf eine andere Ebene, kann es passieren, dass man anschließend keine Tiles mehr setzen kann (zumindest auf der ausgewählten Ebene).
-Die Fenstergröße ist derzeit auch im Editor fest. Interessanter wäre es, beliebig große Karten zuzulassen und den Bildausschnitt im Spiel selbst anschließend zu verschieben.
-Musik und Charakterbewegung im Editor: Ganz nett um zwischendurch mal rasch zu testen, aber eine saubere Trennung von Spiel und Editor wäre vielleicht angebrachter.
-Die "Auflösung" der Blocking-Tiles sollte erhöht werden - sonst läuft man über ein Hindernis auf der Karte hinweg, bleibt aber dennoch an dem Block auf diesem Tile hängen.

Prinzipiell läuft es für den Anfang aber schon mal gut und die Karten funktionieren - soweit getestet - auch:


----------



## Evil-Devil (28. Aug 2009)

hui, geschlagene 2 Stunden hab ich gebraucht...
Irgendwie habe ich keine vernünftige Wasser bzw. Himmel Kachel gefunden :/

Naja, hier das Ergebnis





Was noch super wäre ist eine Undo Funktion bzw. direkt ein Tile im Editor selektieren und löschen zu können. Der ständige Weg nach links oben zur Lösch-Kachel kann sehr anstregend werden.


----------



## M4x0r (29. Aug 2009)

hi, 
macht richtig spaß :]
klasse arbeit!
was noch gut wäre ist eine "ziehfunktion" , wenn man zum beispiel einen weg bauen will. im moment muss man jedes feld einzeln anklicken.
auch verstehe ich nicht genau wie das mit dem npc interface funktioniert. er sagt immer ich lasse ein feld leer, was aber nicht so ist.


----------



## Titanpharao (31. Aug 2009)

Ich konnte es nicht starten, aber eine gute Idee die ganzen NPC's Monster etc mit in den Editor aufzunehmen ...

Mein RPG ist ja schon fast fertig und enthält neben Echtzeit Kämpfen, auch Quest, NPC's, Skills, Items ... lange Liste nach knapp 2 Jahren Entwicklung


----------



## Polli86 (1. Sep 2009)

hi erstmal
und vielen Dank fürs ausprobieren , 
bin ja froh das es bei den meisten wohl ohne größere Bugs und Exceptions läuft 

@Gastredner und Evil-Devil
find ich echt super das ihr mal eine Map gemacht habt,
ich persönlich find beide Maps klasse und wenn man ein
bischen kreativ ist braucht sowas eben seine Zeit ... naja und es liegt vielleicht ein bischen am Editor 

@M4x0r
Danke fürs Lob, wegen dem NPC-Interface werde ich mal schauen was das sein könnte.
Die Ziehfunktion wird auch noch reingemacht, bin ja froh für jede Idee die ich einbauen kann !!!

@Titanpharao
Warum konntest du es nicht starten, Exception oder ähnliches, will ja Totalausfälle vermeiden 

@all
will die Feature-Liste aufjedenfall erweitern, was mich pers. am meisten intersessiert sind
kleines:
- Variable Player-Gestaltung und Position
- keine Var. Fenstergröße sondern feste Auswahlliste wie(640x480, 800x600  und 1024x768)
- Undo bzw löschfunktion 
- Blocking-Tiles überarbeiten

größeres:
- NPC-Interactions (sprechen, kämpfen...)
- Item-System
- daraus folgt dann ein Quest-System (der schwierigere Part)

bin für weiter Ideen/Erweiterungen offen und bedanke mich schonmal 
werd mich dann mal wieder ans progr. machen

viele Grüße Polli


----------



## Gastredner (2. Sep 2009)

Polli86 hat gesagt.:


> - keine Var. Fenstergröße sondern feste Auswahlliste wie(640x480, 800x600  und 1024x768)


Für das Spiel hinterher ist das sicherlich eine interessante Möglichkeit, für den Editor wäre es aber wohl wirklich interessanter, könnte man der Karte selbst eine beliebige Größe geben, über die der Bildschirmausschnitt im Spiel dann halt quasi "hinwegscrollt", wie man es kennt.
Ansonsten hätte jede Karte ja nur die Größe des Fensters, was ein wenig Schade wäre (und nebenbei ein Problem aufwirft: Wie stellt man eine Karte dar, die unter 1024*768 gebaut, aber unter 800*600 gespielt wird? Dem Anwender die Auflösung aufzwingen?).


----------



## newcron (2. Sep 2009)

also ich hätte ja auch schon einige Ideen, die vielleicht ganz interessant wären: 

Zunächst könntest du, das Auflösungsproblem lösen, indem du eine Skalierung anbietest. Damit meine ich jetzt aber nicht so ne primitive nearest-neighbour oder bikubische interpolation, sondern eine interessante, wie diese hier: Pixel art scaling algorithms - Wikipedia, the free encyclopedia
Diese Algorithmen sind wirklich sehr gut zur skalierung von pixel-grafiken geeignet, wie sie in spielen typischerweise vorkommen. Wenn du sie in echt kennenlernen möchtest, probier mal den Super Nintendo Emulator ZSNES oder die ScummVM aus, dort kannst du diese Skalierungsalgorithmen auswählen. Sieht wirklich toll aus!  

Dann wäre auch Unterstützung für Special Effects (Explosionen, Weißes/Schwarzes Überblenden des gesamten Bildschirms, Veränderung des Farbtons,...) eine coole Sache. 

Außerdem könntest du dir eine Script-sprachen-einbindung überlegen. Da Java das bereits ermöglicht, ist das nicht so schwer. Anspruchsvoller wird es jedoch sein, eine gute Spiele-API zu bauen (du willst ja möglichst alles, was deine Spiele-Engine hergibt auch per Script steuern können)


----------



## tdc (2. Sep 2009)

Ich (Java-Anfänger) habe eine kurze Frage: Wenn ich mir jetzt die .jar-Datei von dem Programm gedownloadet habe, was muss ich dann tun damit ich das Programm zum laufen bringe? Bei einem doppelklick kommt nur der Ton einer Fehlermeldung und es passiert nichts. Ich habe auch schon im Internet gesucht, und auch schon einige sachen gefunden, wie z.B. Extrahieren aber es hat nichts gebracht. :bahnhof:


----------



## Painii (2. Sep 2009)

tdc hat gesagt.:


> Ich (Java-Anfänger) habe eine kurze Frage: Wenn ich mir jetzt die .jar-Datei von dem Programm gedownloadet habe, was muss ich dann tun damit ich das Programm zum laufen bringe? Bei einem doppelklick kommt nur der Ton einer Fehlermeldung und es passiert nichts. Ich habe auch schon im Internet gesucht, und auch schon einige sachen gefunden, wie z.B. Extrahieren aber es hat nichts gebracht. :bahnhof:



Ich hatte das gleiche Problem.
Habs genauso mit "java -jar GameEditor.jar" versucht...
Du kannst das Teil entpacken, dann gibts ne bat-datei. Mit der geht das starten. 

Werd mir das demnächst noch genauer anschauen und ne Bewertung schreiben, sieht aber so schon nett aus


----------



## tdc (2. Sep 2009)

Hab ich schon probiert aber wenn ich es versuche kommt ganz kurz ein Fenster, so kurz dass man nur die umrisse erkennen kann und dann verschwindet es wieder. Aber es passiert nichts. Keine extrahierte Datei erscheint und es kommt noch nichtmal eine fehlermeldung oder so.
Ich habe Ultimate Zip als Programm zum extrahieren der Dateien. Brauche ich dafür ein anderes Programm wie z.B. WinRAR?


----------



## Gastredner (2. Sep 2009)

Wenn das Fenster nur kurz auftaucht, ist vermutlich eine Exception geflogen - habt ihr den Inhalt in einen Ordner entpackt, dessen Pfad irgendwo ein Leerzeichen aufweist? Ds geht nämlich nicht, den Fehler hatte ich auch. Einfach mal direkt unter C:\ testen.
polli hat übrigens auch darauf hingewiesen, dass das .jar-Archiv selbst _nicht_ lauffähig ist und stattdessen entpackt und das Programm über die Batchdatei gestartet werden muss.

PS: Damit das Fenster mit der Fehlermeldung bestehen bleibt am besten selbst die Konsole öffnen, ins Verzeichnis der Batch navigieren und diese einfach ausführen. Immer noch der einfachste Weg.


----------



## JaLin (3. Sep 2009)

Schaut schon mal gut aus. :applaus: Speziell mit dem RTP vom RPG Maker XP. Vielleicht kann ich später sogar mal dazustoßen?

Das es 3 Kartenebenen gibt gefällt mir.


----------



## Polli86 (9. Sep 2009)

So, erstmal Dank an alle dies getestet haben oder zumindest versucht haben 

Bin meine To_Do-Liste am abarbeiten und bin froh schonmal
ein wichtiges Problem gelöst zu haben und zwar die leerzeichen
in Ordnernamen. In der nächsten Version wird es keine 
Probleme mehr mit den Zielordnern geben.
Die Systemausgaben wurden auf ein Minimum reduziert und
ein paar kleinere Sachen wurden eingebaut z.B. eine Löschfunktion
beim Mappen 

@newcron
danke für die Tipps, hab mir jetzt chon ein paar Sachen zu Skalierung und Rendering
angeschaut und werde da wohl auch einiges bei mir überarbeiten/einbauen

nochmal besten Dank und Grüße
Polli


----------

