Allgemeine Fragen

  • Themenstarter Themenstarter Sen
  • Beginndatum Beginndatum
S

Sen

Gast
Tag,
ich begann vor einiger Zeit mit Java zu arbeiten und beim nachlesen einiger Sachen sind mir ein paar Fragen gekommen;

1: Es heißt immer man soll AWT und Swing nicht mischen und doch habe ich Probleme dabei nur Swing zu benutzten, da in jedem Beispiel AWT ebenfalls genutzt wird. ( z.B. awt.Color und awt.event. )
Steht irgendwo wie weit ich mit bloßem Swing kommen kann?

2: Ich lerne Java eigentlich nur, weil ich einige Spiele programmieren will. Swing, AWT und SWT sollten da ungeeignet sein. Wie steht es mit OpenGL? Muss man auch hier zusätzlich auf AWT zurückgreifen?

3: Ich habe mal ein kleines Spiel umgesetzt und musste merken, dass etwas mit den Koordinaten nicht stimmt. (Ich nutzte JFrame) Das Problem war, dass der Rahmen den Punkt ( 0, 0 ) verdeckt hatte und ich deswegen " g.translate(5, 27) " als temporäre Lösung einsetzen musste. Wie kann das sein?
 
1: Es heißt immer man soll AWT und Swing nicht mischen und doch habe ich Probleme dabei nur Swing zu benutzten, da in jedem Beispiel AWT ebenfalls genutzt wird. ( z.B. awt.Color und awt.event. )
Gemeint sind AWT/Swing Komponenten, nicht die Klassen an sich. Das du ohne Klassen aus dem awt package nicht auskommst ist klar, Swing baut ja auf awt auf.
java.awt.Color etc. darfst du natürlich ohne Probleme verwenden, nur solltest du nicht einen Button auf einem JFrame platzieren.

zu 2) und 3) kann dir sicherlich jemand was sagen der mehr Ahnung davon hat als ich.
 
2. Man kann auch mit reinem Swing Spiele schreiben. SWT finde ich persönlich ... ähm :autsch: also, wenn, dann würde ich dir Swing empfehlen. Wenn's speziell 3D sein soll, kann man OpenGL verwenden. Da hat man man meistens doch wieder einen AWT-Canvas (aus technischen Gründen), aber man kann z.B. daneben ein Swing-Menü haben, oder einen JDialog anzeigen... Nur sowas wie Swing-Butons auf einem OpenGL-(AWT)-Canvas wird schwierig... Je nachdem, was genau du mit "Spiele" meinst, könnte man auch jMonkeyEngine 3.0 | Java OpenGL Game Engine empfehlen, aber... Man sollte erstmal mit kleineren Beispielen anfangen. Bein kleinen Beispielen kommt am Anfang kleiner Murks raus. Bei großen Beispielen ... ... ... ... 😉

3. Vermutlich hast du direkt "paint" überschrieben und losgelegt. Das sollte man nicht machen. Stattdessen sollte man zum Zeichnen ein JPanel verwenden, wo man paintComponent überschreibt, und dort ist 0,0 dann auch da, wo es sein sollte. Sowas wie Malen in Swing Teil 1: der grundlegende Mechanismus ? Byte-Welt Wiki oder als Sammlung von KSKBs zum Rumspielen auch http://www.java-forum.org/entwuerfe/113007-kein-swing-tutorial-2.html#post806478 könnte da helfen.
 
2) Für OpenGL gibt es zwei Bibliotheken (JOGL und lwjgl), die nicht viel mehr machen, als nur die Funktionen "durchzureichen". Darauf setzen zahlreiche Spiele-Engines auf, für 2D wäre Slick2D zu nennen, für 3D gibt es unter anderem JMonkeyEngine und Ardor3D. Darüber hinaus gibt es auch Java-Bibliotheken, die andere Bibliotheken wrappen (etwa jirr für die C++ Engine irrlicht). Und nicht so gut für Spiele geeignet, aber prinzipiell möglich wäre auch Java3D (das sehr allgemein gehalten ist, da es auch für "ernsthafte" Aufgaben gedacht ist).

3D-Programmierung ist schwierig, ich würde erst einmal mit 2D-Spielen anfangen. Etwas älter, aber immer noch ein ganz guter Einstieg ist Killer Game Programming: Killer Game Programming in Java

Und natürlich Quaxlis Tutorial hier im Forum 🙂
 
Ich bin mit 2D zufrieden^^

3D ist ist mir von den Aufgaben her, die nichts mit dem programmieren zu tun haben, zu etwas aufwendig. Java selbst lerne ich, um irgendwann etwas auf Android zum laufen zu bekommen. Ist für sowas wirklich eine Engine nötig?
 
Das ist wieder was anderes. Auf Android gibt's kein Swing (außer wenn irgendjemand sich tatsächlich den Portierungsaufwand aufhalst... :reflect: ). OpenGL gibt es schon, aber erstmal nur OpenGL ES (abgespeckt gegeüber "richtigem" OpenGL, aber es holt schnell auf). Aber auch da gilt: Erstmal mit Tic Tac Toe anfangen 😉
 
Sieht nach zusätzlicher Arbeit aus🙂

Da fällt mir noch was ein: Wieso muss ich eigentlich, wenn z.B. ein short verlangt wird und ich dann 15 eintrage, diese auch noch in ein short umwandeln?
 
Weil Ganzzahl-Literale (sprich: Werte, die fest im Quellcode stehen) von Java als int behandelt werden (und Gleitkommalietrale als double). Daher gibt es auch Postfixe wie L oder f, die an Zahlliterale angehangen werden können, die eben nicht int/double sein sollen: [c]1000000000L[/c] ist ein long- statt int-Literal, [c]2.50f[/c] ein float- statt double-Literal (Groß- und Kleinschreibung ist bei diesen Postfixen übrigens irrelevant, aber bei long sollte man der Lesbarkeit zuliebe lieber L statt l verwenden). Ein Postfix für short- oder byte-Literale gibt es aber leider nicht.
 
Zusätzliche Arbeit?
Vorher Übungsaufgaben zu machen ala Tic Tac Toe ist eine Verkürzung der eigentlichen Arbeitszeit für das eigentliche Projekt. Fehler die du im eigentlichen Projekt machst bzw. wenn dir "noch was einfällt", sowas muss ausgebügelt werden und kann sogar dazu führen dass ein vollständiger Neuanfang eines Projektes kürzer ist als etwas auszubügeln. Wenn du bereits vorher dich in die einzelnen Themen in Übungsprojekten auseinandergesetzt hast, ersparst du dir viel Zeit und Arbeitsaufwand.
 
Aso, so ist das mit den Buchstaben hinter den Zahlen^^

Zusätzliche Arbeit war auf die anderen Packages für Android bezogen und nicht auf "aller Anfang ist klein". Deswegen bastel ich vorher immer kleine Dinge und verbessere sie nach und nach und gucke was möglich ist.

Danke für die Antworten 🙂
 

Neue Themen


Zurück
Oben