Spieleprogarmmierung mit Java



  • Hallo,
    ich will Java ein bischen besser kennenlernen und deshalb ein paar Spielchen programmieren.
    Was für möglichkeiten hab ich zur Graphik-/Soundausgabe? Komm ich irgendwie an OpenGL dran?
    Wie sieht es mit Keyboard-/Mouseinput aus? Was habe ich da für Möglichkeiten?

    Wo gibts gute Tutorials/Dokus/... zu dem Thema? Hat vieleicht jemand selbst ein kleines Javaspiel programmiert und will mir seinen Quellcode schicken?



  • Es gibt eine OpenGL Schnittstelle für Java, nennt sich glaub ich JOGL. Wird inzwischen auch offiziell von Sun supported.



  • 1. JOGL wird AFAIK nicht von Sun unterstützt. Das ist mehr so eine inoffizielle Sache. Es wird allerdings an einer offiziellen OpenGL-API basierend auf JOGL gearbeitet. Neben JOGL gibt es auch APIs für OpenAL (JOAL) usw.

    Außerdem gibt es weitere OpenGL-Bindings, die einiges an Relevanz haben. LWJGL ist beispielsweise eine sehr häufig genutzte Bibliothek für genau diesen Fall.

    2. Auch eine Abstraktionsebene höher wird man fündig. Java3D ist beispielsweise eine sehr gut designte 3D-Bibliothek. Diese nutzt intern entweder OpenGL oder Direct3D. Es gibt da verschiedene Versionen, die nach außen hin allerdings vollkommen gleich sind. Weiterhin gibt es Xith3D, das ähnlich Java3D sein soll, aber auf JOGL basiert.

    3. Ansonsten könnte für dich auch noch das "Java Media Framework" interessant sein.

    4. Auch die JAI-API (Java Advanced Imaging) könnte für dich von Relevanz sein.

    Guck dir die Sachen mal an. Du hast ja nicht so ganz genau gesagt, was du eigentlich brauchst, deshalb wirst du es nur selbst genau entscheiden können.



  • JOGL ist AFAIK sehr wohl eine direkt von SUN unterstütze Technologie!

    Hier gibts noch einige Tutorials zum Thema:
    http://www.cokeandcode.com/index.php?page=resources

    Hier gibts noch das Javagaming-Forum. Dort tummeln sich meines Wissens fast alle relevanten Java-Game Programmierer, unter anderem auch die LWJGL-Coder
    http://www.javagaming.org/cgi-bin/JGNetForums/YaBB.cgi
    Besonders interessant auf dieser Seite ist das Wiki, da werden viele Libs zum Thema vorgestellt!

    Ich bin auch gerade dabei ein kleines Java-Spielchen zu programmieren und bis auf die Graphikperformance ist mir noch nichts aussergewöhnlich negatives zu meinen früheren C/C++ Spielereien aufgefallen.



  • Gregor schrieb:

    1. JOGL wird AFAIK nicht von Sun unterstützt. Das ist mehr so eine inoffizielle Sache. Es wird allerdings an einer offiziellen OpenGL-API basierend auf JOGL gearbeitet.

    Soweit *ICH* weiß aber schon. Denn ihr Java3D haben sie fallen gelassen (und wollen jetzt JOGL pushen, da es viel besser nutzbar ist).
    Das ursprüngliche Projekt zu JOGL war GL4Java, als SUN es supportete wurde es - mit einigen Änderungen - zu JOGL.

    Gregor schrieb:

    2. Auch eine Abstraktionsebene höher wird man fündig. Java3D ist beispielsweise eine sehr gut designte 3D-Bibliothek. Diese nutzt intern entweder OpenGL oder Direct3D. Es gibt da verschiedene Versionen, die nach außen hin allerdings vollkommen gleich sind.

    Wird aber wie gesagt nicht weiterentwickelt und ist ätzend.

    Gregor schrieb:

    Weiterhin gibt es Xith3D, das ähnlich Java3D sein soll, aber auf JOGL basiert.

    Xith3D ist ein Scenegraph Manager und Renderer mit Unterstützung für JOGL und LWJGL. Das Design ist offen, so daß man auch einen Direct3D Port machen könnte.

    Hier findest Du die "core"-Projekte, d.h.
    JOGL - OpenGL Binding (3D-Grafik)
    JOAL - OpenAL Binding (Audio)
    JINPUT - Eingabegeräte Unterstützung

    https://games-core.dev.java.net/



  • Natürlich wird Java3D weiterentwickelt. Hier ist der JSR für Java3D 1.4. Der läuft und wurde nicht irgendwie beendet oder so, wie es mal mit JSR 134 passiert ist. Java3D hat selbstverständlich auch eine Existenzberechtigung. Etwas wie JOGL steht nicht in direkter Konkurrenz zu Java3D.

    Für offizielle OpenGL-Bindings für Java gibt es auch einen JSR: http://www.jcp.org/en/jsr/detail?id=231
    Dieser basiert lediglich auf JOGL, ist aber nicht JOGL. Da hier schon die Foren von javagaming.org genannt wurden: Wenn ihr da hin und wieder mal reingucken würdet, wüßtet ihr das. 😉



  • auf die Maus-/Tastatureingaben kannst Du einfach reagieren, indem Du einen MouseListener / KeyListener in Deinem Programm implementierst und dann die entsprechenden Funktionen benutzt.
    Könnte dann ungefähr so aussehen (aus dem Bauch raus):

    import java.awt.*;
    import java.awt.event.KeyEvent;
    import java.awt.event.MouseEvent;
    
    public class meinProg extends Frame implements KeyListener, MouseListener{
    
      public meinProg () {
        super();
      }
    
      // alle Methoden des KeyListeners müssen implementiert
      // werden, weil sie nur als abstract definiert sind
      void keyTyped (KeyEvent e) {
        if (e.getKeyCode()==VK_F1) {
          ;  //Do something important
        }
      }
      void keyPressed (KeyEvent e) {}
      void keyReleased (KeyEvent e) {}
    
      // Ebenso mit den Methoden von MouseListener
      void mouseClicked (MouseEvent e) {
        if (e.getButton()==BUTTON1) {
          ; //Do something less important
        }
      }
      void mouseEntered (MouseEvent e) {}
      void mouseExited (MouseEvent e) {}
      void mousePressed (MouseEvent e) {}
      void mouseReleased (MouseEvent e) {}
    
    }
    

    Genau musst Du das dann aber noch mal in den SDK Docs nachlesen.
    Falls Du DirectX verwenden willst:
    Da gibt es für Inputs sowas wie DirectInput. Damit kann man echt viel machen; soweit ich weiß läßt sich damit auch Force Feedback ansteuern. Aber davon hab ich leider noch nicht so viel Ahnung.


Log in to reply