Was sollte ich verwenden, um Anzeige-Spiel-Grafik?
Habe ich ein system für ein Spiel aber ich weiß nicht, was sollte ich verwenden, um es anzuzeigen. Ich mache eine vertikale shooter-Spiel und ich habe geschrieben, die Methoden für alle Klassen controlling Feinde und Spieler, aber ich habe keine Ahnung, wie effizient das Spiel anzuzeigen. Ich dachte, die Leinwand, das würde repaint jedem Bild, aber ist das wirklich die effektivste Methode?
Wichtige details:
- ideale framerate: 25fps
- Es ist ein 2d Spiel
- Gibt es irgendwo zwischen 25-100 Objekte auf dem Bildschirm zu jeder Zeit, von denen alle bewegt
- Alle Objekte angezeigt, die Bilder sind alle im PNG-format
- Das Fenster 640px von 480px
- Jetzt alle Bilder geladen sind als BufferedImage, obwohl ich könnte leicht ändern Sie diese
7. Ich brauche ein Koordinatensystem. Dies ist der einzige wesentliche Teil, der nicht geändert werden kann, ohne die völlige Neustrukturierung meines Codes.
Allem die Art und Weise habe ich alles eingerichtet, jedes frame alle Objekte, die sich bewegen und interagieren in einem Koordinatensystem, die ich entwickelt (beschäftigt sich mit der Kollisionserkennung und Bewegung, keine grafische Komponente), dann sollte alles lackiert werden, um den Bildschirm, einfach, indem Sie durch die ArrayLists, die verfolgen, alle sich bewegenden Objekte und Malerei werden eins.
- Ist dieses Spiel ein 2d oder 3d Spiel?
- Ich war nicht einmal sicher, Sie könnte verwenden Sie ein png mit
Graphics2D
, aber ich habe schnell und es sieht OK mitjavax.imageio
undjava.awt.image.BufferedImage
. - Nicht mit einem
Canvas
in diesem Tag und Alter. Die Swing-Entsprechungen wäre entwederJComponent
oder (wenn der UI-Mischungen kundenspezifische Malerei mit festgelegten Komponenten)JPanel
.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Swing ist akzeptabel,
JPanel
ist double-buffered per default, und einejavax.swing.Timer
mit einer Periode von 40 ms geben Sie ~25 Hz updates. Diese Beispiel zeigt den grundlegenden Ansatz, während dies Beispiel zeigt eine Reihe von Bildern in Bewegung.Es ist nicht ungewöhnlich, den das Modell und die Ansicht verwenden unterschiedliche Koordinaten; alles, was benötigt wird, sind Funktionen zum anzeigen einem system zum anderen. In diesem Spiel, die Ansicht stützt sich auf vier Methoden, dass Kartenkacheln in Pixel und Umgekehrt. Der gleiche Ansatz wird skizziert hier für Kartenkacheln.
Haben Sie eine Reihe von Optionen zur Verfügung:
Erstens, Sie könnte verwenden Sie eine vorhandene Java-Spiel-frameworks:
(Slick richtet sich an 2D-Grafik, die zwar JMonkey richtet sich an 3D und nutzt die OpenGL - Während ich schaute in Ihre Benutzung, habe ich eigentlich nicht genutzt habe)
Alternativ können Sie code alles selber. Von den Klängen der Dinge ist dies Ihre erste (grafisch) Spiel, so möchten Sie vielleicht zu Lesen, auf eine Technik, bekannt als "double buffering", wobei Sie schreiben, die jeden Rahmen aus dem Bildschirm und malen Sie einfach die ganze Sache auf dem Bildschirm, da dies kann dazu führen, flüssigere animation.
Zu erhalten, die Sie in Spiele-Entwicklung ein bisschen mehr, ich würde empfehlen, dieser Website Lesen, Killer Game Programming in Java von Dr. Andrew Davison, als er gibt einige gute Tipps, und bietet auch eine gute progressive-lernen-Pfad für neue Spiel-Entwickler, und verschieben Sie Sie in 2D-und 3D-Entwicklung.
HTH
Die Antwort hängt wirklich davon ab, ob das Spiel 2D oder 3D.
Wenn Ihr Spiel ist 2D, eine einfache Möglichkeit zu tun, was Sie wollen, ist auf Java-eigene 2D-Grafik-API. Ein gutes tutorial, um Ihnen den start (zumindest meiner Meinung nach) finden Sie bei Die Java-Tutorials. In meiner Erfahrung habe ich herausgefunden, dass Java-Grafik-API ist einfach zu erlernen und effizienter ist, als man erwarten könnte. Die grundlegende Technik ist es, Ihre Spiel-code zu verfolgen, die Positionen aller Objekte, dann übersetzen Sie diese Koordinaten in screen-Koordinaten und zeigen Sie passende Bilder an diesen Standorten. Ich habe eine (sehr einfache) Spiel in Java einmal, und dies ist die Methode, die ich verwendet.
Wenn Ihr Spiel ist in 3D, OpenGL ist definitiv der Weg zu gehen. Ich habe nur begrenzte Erfahrung mit OpenGL, so bin ich nicht sicher, wie einfach die Java-bindings sind, mit zu arbeiten. Im Allgemeinen, die 3D-Programmierung ist ein massives Thema, so dass, wenn dies ist ein first-time-Projekt oder sind Sie nicht bereit für eine große Zeit-Investition, würde ich versuchen, ein gutes Spiel-framework zu verwenden, oder machen Sie das Spiel 2D. Wenn Sie interessiert sind, in OpenGL oder 3D-Programmierung im Allgemeinen, eine schnelle Google tauchte der JOGL Projekt. Ich würde empfehlen, untersucht JOGL als ein Weg, um den Zugriff auf die OpenGL-API in Java-code, aber für das lernen tatsächlich OpenGL empfehle ich Die OpenGL SuperBible(5. Auflage), allgemein bekannt als Das "Blaue Buch".
Die code-Beispiele sind alle in C++, aber für die OpenGL-Funktionen, könnte es möglicherweise nur eine Frage der Verwendung einer wrapper-Bibliothek. Zum Beispiel:
Werden kann:
Leider kann ich keine konkreten Beispiele, weil ich noch nicht verwendet OpenGL mit Java Programmieren, aber das obige Beispiel, sehr grob kalkuliert, wie die OpenGL ES auf der Android-Plattform.
Soweit die Leistung... der Java-API kommt mit einer nicht-triviale Menge von overhead, aber ich konnte sehen, es tut gut für Ihre Zwecke. Sie werden vielleicht ein wenig mehr Mühe in die Herstellung Ihrer algorithmen effizient, und Ihr Spiel kann nicht laufen da auch weniger fähige hardware. Wenn Sie sich entscheiden, um die OpenGL-route, wird es mit ziemlicher Sicherheit viel schneller (wieder, je nachdem, wie effizient die algorithmen sind), sondern ist entsprechend viel schwerer zu lernen und loslegen mit der. Sicherlich machbar, aber es wird eine Herausforderung sein.
Leinwand wird schnell als zu langsam für die 25+ fps anvisiert.
die Anzahl der Objekt ist, ist irrelevant, was ist, ist, wie Komplex Sie sind.
wenn es 100 Bilder nichts nehmen im Vergleich zu 1 3D-Modell des Avatar zum Beispiel.
in Java können Sie entweder Opengl oder Java3D
Ich würde dazu neigen, gehen mit Opengl als eine persönliche Wahl