Unterschied LWJGL und Slick2D

Hallo,

ich beschäftige mich gerade mit LWJGL und Slick2D.

Nur blicke ich hier nicht ganz durch.
Im Netz heißt es, das “Slick2D” eine 2D Java Game Library ist.
Eine Library stellt ja nichts anderes als Klassen zur Verfügung.
Genauso ist ja LWJGL eine Java-Library.

In einem Video wurde erklärt, das “Slick2D” eine struktur für “LWJGL” sei??

Was soll das jetzt heißen??
Ich dachte bei beiden handelt es sich un eine Java-Library??

eine Library kann eine andere auch nutzen…

AWT steht in der normalen Java-API recht grundlegend, hat bestimmt native Methode, Anbindung an das Betriebssystem in jeder Implementierung für eine Plattform,
AWT kann man direkt für GUI-Programme benutzen, aber schön ist das alles nicht unbedingt,

Swing gab es erst später und macht hinsicherlich Betriebssystem nichts (neues) selber, setzt auf AWT auf, kann aber viel mehr oder ändert einfach auch nur bestimmte Regeln,
für sich eine vergleichsweise komfortablere Library,

genauso kann es noch weitere geben die Swing benutzen, aber viel ist wohl nicht mehr zu holen,
andere Ansätze wie SWT oder JavaFX müssen andere Wege gehen wenn ich das grob richtig nachschlage


LWJGL ist nun eine grundlegende Library zum Zeichnen, kann alles, wenig Konkurrenz nötig,
aber durchaus sinnvoll, dass der Zugriff eher rudimentär ist, kein großes kompliziertes bestimmtes Programmiermodell oben drauf,
schon gar nicht Focus auf Spiele, wäre unpassend

das bietet sich für speziellere Libraries für bestimmte Einsatzzwecke an, etwa Slick2D,
welche die Grundfunktionen zum Zeichnen nutzen, aber noch einen Berg an Klasse für nette Tools und spezielles Zeichenmodell haben

neben wer weiß was sonst allem hilfreiches zur Spielsteuerung, wenn eine Basisklasse schon org.newdawn.slick.BasicGame heißt…
passend seht in der API: “A basic implementation of a game to take out the boring bits”…

Also ganz einfach gesagt, erweitert Slick2D die LWJGL Library?

Beide Bibliotheken arbeiten auf ganz unterschiedlichen Abstraktionsebenen. LWJGL stellt grundlegende Zeichenoperationen zur Verfügung (“zeichne ein Dreieck”), Slick2D enthält Objekte, die zur Spielprogrammierung genutzt werden können (“zeichne diese Tilemap”). Slick2D “erweitert” LWJGL nicht, es benutzt es. LWJGL-Funktionen sind nämlich (soweit ich weiß) nicht über Slick2D aufrufbar, und nur dann könnte man von Erweiterung reden.

Dass Bibliotheken andere Bibliotheken benutzen, ist normal. Oft sieht man von diesen Abhängigkeiten bei der Benutzung nicht mehr viel (etwa wenn man Vaadin als Web-Framework verwendet, ist nichts mehr davon zu sehen, dass es intern auf einem anderen Framework, nämlich GWT, aufsetzt).

“Slick2D “erweitert” LWJGL nicht, es benutzt es. LWJGL-Funktionen sind nämlich (soweit ich weiß) nicht über Slick2D aufrufbar, und nur dann könnte man von Erweiterung reden.”

Wenn Slick2D nicht die Funktionen von LWJGL benutzen kann, was benutzt es dann von LWJGL?

MfG

Ja, die Abstraktionsebenen sind das entscheidende. Teilweise etwas vereinfachend und suggestiv:

LWJGL bietet direkten Zugriff auf OpenGL - auf der gleichen Ebene wie JOGL ( JOGL - Java Binding for the OpenGL API ). Das eröffnet natürlich alle Möglichkeiten, aber ist entsprechend aufwändig. Als Beispiel, ein Programm, wie man in JOGL (in LWJGL wäre es praktisch das gleiche) ein einzelnes Dreieck zeichnet: https://github.com/elect86/helloTriangle/blob/master/HelloTriangle/src/gl4/helloTriangle/HelloTriangle.java (Das ist nichtmal alles, die Shader sind getrennt davon). Das zu erweitern, damit man zwei Dreiecke zeichnen kann, wäre schon aufwändig. Das Dreieck mit einer Textur zu belegen würde den Code sicher um XX% vergrößern. Auf dieser Ebene ein Modell mit Texturen aus einer Datei zu laden, und die Möglichkeiten zu bieten, das Objekt mit der Maus zu drehen, würde sicher einige tausend Zeilen Code benötigen.

Und genau DIESE „einigen tausend Zeilen Code“ sind (etwas vereinfacht gesagt) das, was in Slick2D steckt. Slick (und andere „Game Engines“) bieten Klassen und Funktionen, die

  • „Unwichtige“ Details verstecken
  • „Die wichtigsten“ Freiheitsgrade (für ein Spiel) zur Konfiguration anbieten.
    Zum Beispiel könnte man die oben angedeutete Aufgabe „Ein Texturiertes Modell laden und mit der Maus drehen“ mit einer (hypothetischen) SEHR stark abstrahierenden Game-Engine vielleicht schreiben als
RenderWindow renderWindow = new RenderWindow(); // Hier stecken 1000 Zeilen Code drin
Model model = new Model("C:/myModel.obj"); // Hier stecken 1000 Zeilen Code drin
Interaction interaction = new MouseInteraction() // Hier stecken 1000 Zeilen Code drin
renderWindow.attach(interaction); // Hier stecken 100 Zeilen Code drin
renderWindow.addModel(model); // Hier stecken 500 Zeilen Code drin

Das ist dann viel einfacher.

(Der Ka… Knackpunkt ist, genau die richtigen Freiheitsgrade zu liefern, die der Benutzer braucht. Wenn der Benutzer jetzt Antialiasing haben will, muss es die Möglichkeit geben, das mit sowas wie renderWindow.setAntialiasing(true); dem Renderer mitzuteilen. Wenn er will, dass die Mausbewegung invertiert ist, muss man das mit interaction.setInverted(true); umschalten können… so eine Abstraktion ist also immer auf ein bestimmtes Feld (z.B. Spiele) ausgerichtet, während LWJGL/JOGL/OpenGL mit ihrer „nicht-abstraktion“ darauf abzielen: Wenn ein Pixel auf dem Bildschirm landen soll, dann läuft er durch diese Pipeline. (Ja, auch DA steckt abstraktion drin… Am Ende geht es nur um „Strom oder nicht Stom“ ;-)))

EDIT:

Genau das ist die Abstraktion: Wenn man Slick verwendet, dann sieht man die LWJGL-Funktionen nicht mehr. Man kann also nicht schreiben

SlickModel slickModel = new SlickModel();
slickModel.callSomeLwjglFunction();

Intern ruft Slick diese LWJGL-Funktionen natürlich auf, aber diese Funktionen sind für den, der Slick benutzt, nicht mehr sichtbar (man muss sich also nicht mehr mit den Low-Level-OpenGL/LWJGL-Details rumschlagen)

der Anwender kann nicht direkt auf diese Funktionen zugreifen, Slick2D selber intern versteckt natürlich sicherlich zahlreich,

das bedeutet dass man ein normales LWJGL-Programm nicht mal eben mit paar kleinen Änderungen in Slick2D laufen lassen kann,
um paar nur dort vorhandene Zusatzfunktionen zu benutzen,
sondern jeder einzelne Befehl umzubauen, wahrscheinlich nichtmal 1:1, sondern anderes Modell zu verwenden

aber ist nicht dramatisch und wahrscheinlich auch nur eine zu genaue Auslegung des Begriffes ‚erweitern‘ wie du ihn benutzen wolltest,

für die Anwender von Slick2D bietet es gewiss viel mehr als LWJGL an sich, genug Zeichenfunktionen (wenn auch anders aufgebaut) + genug anderes dazu,
umgangssprachlich durchaus eine Erweiterung

O.K.

Um genau zu sein:

Wie bereits erwähnt, handelt es sich bei “Slick2D & LWJGL” um Libraries.

Slick2D bietet viele Funktionen an, die LWJGL nicht besitzt.
Zusätzlich greift Slick2D auf die Funktionen von LWJGL zu.
Den zugriff macht Slick2D intern, dadurch sieht der Anwender die Funktionen von LWJGL nicht.

Ganz einfach erklärt.

Sollte so passen, oder ?

wenn es dich selber interessiert ist das eine komische Art der Bestätigungs-Nachfrage,
wichtig ist doch allein ob du einen Sinn darin siehst,
nicht wie einfach oder schwer oder rekapituliert in welchen Schritten etwas zu erklären ist…

wenn es die Beantwortung irgendeiner Hausaufgabe ist, so unwahrscheinlich das auch ist,
aber genau so formuliert (‘so passt es ins Aufgabenblatt hingeschrieben?’),
dann hättest du das von Anfang an deutlich machen sollen, unschöne Sache

Das ist keine Hausaufgabe.

Ich weiß nicht, wo das Problem liegt.

Habe nur versucht einen kurzen Text zu schreiben der die Antwort kurz und bündig erklärt.
Ich habe nichts von ewig langen und unverständlichen Antworten.

Deshalb habe ich das so zusammengefasst und wollte einfach nochmal Wissen ob ich das so korrekt Wiedergegeben habe, mehr nicht.

Nein! Slick2D bietet völlig andere Funktionen als LWJGL!

Nur weil beide etwas mit Computergrafik zu tun haben, bedeutet nicht das diese zwangsweise vergleichbar sind. Slick2D und LWJGL spielen in einer völlig anderen Abstraktionsebene.

Gruß
Fancy

Hat keinen Sinn hier, werde mich in einem anderen Forum schlau machen.

Habe keine Lust darauf, das jeder was anderes sagt.

Weiß nicht warum es nicht möglich ist, das mir einer das kurz und einfach erklärt.
Aber dazu sind die Leute leider nicht in der Lage.

Jede Erklärung macht zwangsläufig Annahmen über den Kenntnisstand des Fragenden, und darüber, welche Art von Antwort er sich erhofft.
Vielleicht findest du in “einem anderen Forum” Antworten, die dir eher zusagen.

Aber ich versuch’s nochmal:

“LWJGL is total kompliziert, aber ist effektiver als Slick. Dafür ist Slick besser für Spiele”

Hm. Wäre das so hilfreich?

Jedenfalls könnte man das, was du in #8 geschrieben hast, grob so stehen lassen.

DANKE!!

Mehr wollte ich nicht Wissen.

MfG

(Jetzt muss nur noch jemand meinem letzen Post widersprechen, dann platzt dir vermutlich eine Halsschlagader :smiley: )

unterstreich

[OT]Wenn ich das schreibe, werde ich gleich bestraft.[/OT]

Slick baut auf der anderen API auf. Mehr komfortabel und etwas höher gelegen.

Also noch mal zusammenfassend: AWT/Swing Fenster und so etwas, lwjgl Zeichnen und so etwas („besser“ zeichnen), Slick game (engine) und so etwas.

100%ig korrekt ist das bestimmt nicht, aber so etwa.

„Slick bietet viele Funktionen an“ aaaaber falsch, es erweitert einfach etwas.

Man kann auch etwas philosophieren: Abstrakter und dennoch eingeschränkter. :expressionless:

[ot] @Javaman1991 Falls du das da ^ noch liest: Nicht so ernst nehmen. Das ist ziemlich wirres Gestammel
[/ot]