# SWING ausreichend? (mittelkleines 2D-Spiel)



## Tim_ (26. Jul 2011)

Hallo zusammen,

ich habe vor in nächster Zeit (hab Semesterferien + Wetter ist so lala ) mal wieder an auf Java basiertem Spiel zu arbeiten.

Da ich schon zuvor ein kleines Spielchen programmiert habe -



("Search It!" - es geht darum bestimmte Muster auf einem Spielfeld zu finden - Download - wers sich antuen will auch mit Sourcecode  )

- dachte ich mir, dass es diesmal deutlich komplexer werden soll.

Meine Idee ist ein kleines Strategiespiel zu programmieren, sprich baubare Einheiten/Häuser + einfaches Kampfsystem + generierte Karte + Maussteuerung etc.
Aber da ich die ganze Sache nicht übertrieben starten will, soll alles erstmal in einfacher 2D-Grafik mit einem festen Blickwinkel sein.

Aber meine eigentliche Frage ist, reichen dafür die Mittel von Swing aus?
Oder wäre es sinnvoll sich eher in eine Game-Middleware wie LWJGL anzuschauen?

Für mein erstes Spiel hatte ich mir nur sehr kurz die Grundlagen von Swing angeschaut, deswegen kann ich das nicht wirklich beurteilen, ich hoffe ihr könnt mir dazu etwas erzählen.


----------



## Landei (26. Jul 2011)

Ich spiele zur Zeit an etwas RPG-artigen herum und nutze dazu Slick2D. Der große Vorteil ist, dass man damit Maps laden kann, die mit dem freien Editor TileD erstellt wurden.

Hier ein kleines Tutorial: Using Slick 2D to write a game  The Java Blog (für ein richtiges Spiel sollte man aber gleich StateBasedGame verwenden).

Nachteil ist, dass das ganze "heavy-weight" ist (da auf OpenGL via lwjgl aufbauend) und damit nicht besonders gut mit Swing zusammenarbeitet. Dafür hat man OpenGL-Features, die Swing/Java2D nicht bietet.


----------



## babuschka (26. Jul 2011)

Hallo,

nachdem ich mir vor kurzer Zeit Slick2D angeschaut habe würde ich Dir eher dazu raten, ein für Dein Projekt ein besser geeignetes Framework (wie das von Dir genannte LWJGL) oder eine der bekannteren Game Engines (JME, Slick2D etc) auszuwählen. Zu einer Game Engine solltest Du vor allem dann greifen, wenn Du nicht alle Funktionalitäten selbst umsetzen möchtest, sondern auf bereits getesteten Code aus Open Source-Projekten zurückgreifen möchtest.

Selbstverständlich kannst Du das Projekt auch gerne mit Swing umsetzen, allerdings kannst Du dich dort schon recht glücklich schätzen, wenn Du damit auf verschiedenen PCs auf einigermaßen akzeptable Framerates kommst...
Falls Du Dich für Swing entscheidest kann ich Dir das Tutorial von Quaxli (einfach hier im Forum suchen) bzw "Killer Game Programming in Java" von Andrew Davison empfehlen.

Gruß,

JohnMcLane


----------



## MasterK (26. Jul 2011)

Hi,

also da swing inzwischen prinzipiell sowieso hardware beschleunigung nutzt, sofern verfügbar, kann man sagen: ja, swing reicht durchaus für einiges aus. Allerdings bietet swing doch so einige fallstricke, die die performance extrem nach unten reissen können. Ich denke da so zB an das verwenden von selbst erstellten bufferedimages.
Also man muss schon wissen, was man tut.

Für ein aktuelles projekt habe ich mit swing begonnen die grafik darzustellen. Etliche tausend (skalierte) tiles sind da kein problem, läuft selbst auf meinen laptop von 2003 schön flüssig bei ~50fps (framegrenze). Allerdings ist mir aufgefallen, dass eine zu grosse zeichenfläche selbst auf modernen rechnern die geschwindigkeit einbrechen lässt. Ich vermute hier eine beschränkung bzgl texturen oder so (grösser als 1024x1024 pixel). Um das problem zu umgehen und auch in zukunft nach oben luft zu haben, bin ich dann von swing auf jogl umgestiegen (bzw bin noch dabei), will aber swing eigentlich weiterhin mit drin haben (zb für windows-rechner ohne brauchbare opengl treiber).

Lange rede, wenig sinn:
Ja, swing ist für 2d sachen zu gebrauchen, sofern du weisst was du machen solltest und was du bleiben lassen musst. Allerdings stösst man irgendwann an irgendwelche grenzen, dann lieber gleich direkt die grafik API nutzen (in dem fall opengl).


----------



## Tim_ (27. Jul 2011)

Also erstmal danke für die Antworten, haben mir schonmal etwas Eindruck von der Sache verschafft.

Dennoch bin ich mir immer noch nicht 100%-ig sicher was ich jetzt verwenden soll.
Eine Echte GameEngine möchte ich gar nicht verwenden, da ich gerade Spass daran habe fast alle dinge selber zu schreiben (auch wenn es sicher schon fertige Dinge gibt, welche vermutlich auch besser wären).
Auch das ist ein grund weshalb ich bisher zu Swing tendiert hatte.

Nun bin ich jetzt zwischen Swing und Slick2d in der Entscheidungsphase.

Deshalb hab ich noch ein paar kleine Fragen:

Ist der Renderprozess bei Slick2d wegen opengl deutlich besser?
Wäre es auch mit Swing möglich mehre dutzende (vl auch hunderte) Sprites - Einheiten im Spiel - zu zeichnen mit akzeptabler Performance?
Gibt es öfter Probleme durch die zusätzlich benötigten Libraries von LWJGL (vor allem wenn es auf mehreren Plattformen mind Windows + Linux laufen soll)?


----------



## Landei (27. Jul 2011)

- Ist der Renderprozess bei Slick2d wegen opengl deutlich besser? -> Ich würde sagen ja, die Framerates bei einer TileD-Map als Hintregrund ohne irgendwas sind sehr hoch, da ist genug Luft für jede Menge Sprites.

- Wäre es auch mit Swing möglich mehre dutzende (vl auch hunderte) Sprites - Einheiten im Spiel - zu zeichnen mit akzeptabler Performance? -> Schwer zu sagen. Ich schätze mit undurchsichtigen oder transparenten (also Pixel sichtbar oder nicht) Sprites ist das möglich, bei transluzenten (also mit "durchscheinenden" Stellen, auch für Antialiasing benötigt) eher nicht.

-  Gibt es öfter Probleme durch die zusätzlich benötigten Libraries von LWJGL (vor allem wenn es auf mehreren Plattformen mind Windows + Linux laufen soll)? -> Zu Linux kann ich nichts sagen, ärgerlich ist, dass man unter Windows aufpassen muss, ob man die 32- oder 64bit LWJGL.DLL braucht. Aber prinzipiell ist das alles beherrschbar.


----------



## Marco13 (27. Jul 2011)

In bezug auf den zweiten Punkt und in Anlehnung an http://www.java-forum.org/spiele-mu...s-fuer-bessere-animationen-grafik-engine.html : Schau dir mal auf http://www.emaggame.com/ den Test "10000 Sprites" an. Hier läuft es nicht nur mit dutzenden oder hunderten, sondern auch mit ~30000 (dreißigtausend) Sprites noch flüssigst. (Wie im anderen Thread gesagt weiß man zwar nicht, ob dort noch etwas anderes als ein selbst in Plain Java2D entwickeltes Framework verwendet wird, aber es scheint nicht so...)


----------



## Tim_ (29. Jul 2011)

Ok nochmals vielen dank für eure Antworten und Ideen.

Ich habe mich inzwischen entschieden auf Slick2D zu setzen und habe mich inzwischen auch ein wenig reingelesen.
Ich denke das ist auch die bessere Wahl, da es halt doch deutlich mehr Möglichkeiten bietet. Und selbst wenn ich selber alles Programmieren wollte, hindert mich ja nichts daran das auch zu machen und die gebotenen Möglichkeiten zu ignorieren


----------



## Empire Phoenix (29. Jul 2011)

Für lwjgl kannste dir im prinzip ne erkennung des betriebsystems basteln die die passenden nativs dann selber in den entsprechnden ordner entpackt.


----------

