FB18.de - Das Informatikforum
Java - Spieleentwicklung: Frage! - Druckversion

+- FB18.de - Das Informatikforum ( /mybb )
+-- Forum: Off-Topic ( /forumdisplay.php?fid=115 )
+--- Forum: Hard- und Softwarefragen ( /forumdisplay.php?fid=48 )
+--- Thema: Java - Spieleentwicklung: Frage! ( /showthread.php?tid=11359 )


Java - Spieleentwicklung: Frage! - JGame - 23.05.2010 13:00

Hallo. Ich habe bisher nicht sehr viel Erfahrung mit Spieleentwicklung (ohne vorgefertigte Engine), tue aber gerade natürlich genau das und dazu noch mit Java. Ist eigentlich alles ganz chique, nun stellt sich mir aber eine Frage, die mir Google bisher nicht beanworten konnte. Vielleicht ist es auch keine richtige Wissensfrage sondern eine Designentscheidung.

Naja, also: Ist es bei grafiklastigen Programmen Usus, die Grafiken(die lokal liegen) vorher in den Arbeitsspeicher zu laden oder kann man davon ausgehen, dass der HSP(heutzutage?) im Grunde schnell genug ist um sich jedes mal ein erneutes Laden (ImageIO.read) leisten zu können? Bisher ist bei mir zweiteres realisiert, aber bei meiner übermenschlichen Mühle merke ich natürlich keinerlei Probleme. Gibt es da eine Art Standard oder liegt es an mir den Durchschnittlichen zur Verfügung stehenden RAM einzuschätzen, diesen zu füllen und den Rest nachzuladen? Übernimmt das gar die Java Optimierung+OS für mich, wenn ich alles in BufferedImages lagere?

Hoffe es hat hier jemand Erfahrungen auf diesem Gebiet.


RE: Java - Spieleentwicklung: Frage! - Ragmaanir - 24.05.2010 00:58

Hi, Spieleprogrammierung unter Java habe ich nicht gemacht, aber ich habe ein bischen Erfahrung in C++ und C# mit DirectX und OpenGL. Üblicherweise werden Grafiken *einmal* von der Festplatte in den Speicher (am besten Grafikspeicher weil die Graka darauf schneller zugreifen kann) geladen. Auch 3D Modelle werden meist direkt in den Grafikspeicher geladen. Jedes mal die Grafik von der Festplatte zu laden ist eher nicht empfehlenswert (ob Java möglicherweise die Grafiken irgendwie cached weiß ich allerdings nicht).


RE: Java - Spieleentwicklung: Frage! - Fred - 24.05.2010 01:16

JGame schrieb:
jedes mal ein erneutes Laden

Von wo?


RE: Java - Spieleentwicklung: Frage! - Anonymer User - 24.05.2010 11:54

Ragmaanir schrieb:
Hi, Spieleprogrammierung unter Java habe ich nicht gemacht, aber ich habe ein bischen Erfahrung in C++ und C# mit DirectX und OpenGL. Üblicherweise werden Grafiken *einmal* von der Festplatte in den Speicher (am besten Grafikspeicher weil die Graka darauf schneller zugreifen kann) geladen. Auch 3D Modelle werden meist direkt in den Grafikspeicher geladen. Jedes mal die Grafik von der Festplatte zu laden ist eher nicht empfehlenswert (ob Java möglicherweise die Grafiken irgendwie cached weiß ich allerdings nicht).



Danke, das hilft mir schonmal ungemein. Dann wird es wohl auch eine möglichkeit geben müssen, den zur Verfügung stehenden Platz im RAM/Grafikspeicher abzufragen, nicht wahr? Ich kann schließlich nicht wie ich lustig bin alles in den Arbeitsspeicher laden und davon ausgehen, dass schon jede Maschine bestimmt genügend davon zur verfügung stellt. Oder wird bei diesem Fall dann das ganze vom OS reguliert?

Zitat:
Von wo?

Von der Festplatte meinte ich.


RE: Java - Spieleentwicklung: Frage! - Fred - 24.05.2010 15:03

Anonymer User schrieb:
Zitat:
Von wo?

Von der Festplatte meinte ich.

Du wägst ernsthaft ab, für jeden Frame alle Grafiken von der Festplatte zu laden? Das halte ich gelinde gesagt für keine gute Idee...

Ideal wäre es, wenn Du den Kram einmalig auf den Graka-Speicher lädst, aber das hängt natürlich stark von der verwendeten API ab, ob das überhaupt geht. Mit OpenGL kannst Du zum Beispiel einmalig alle Texturen und Vertex Buffer hochladen und dann direkt benutzen. (Es sei denn, Du bewegst Dich schon im GB-Bereich.)


RE: Java - Spieleentwicklung: Frage! - JGame - 24.05.2010 15:16

Zitat:
Du wägst ernsthaft ab, für jeden Frame alle Grafiken von der Festplatte zu laden? Das halte ich gelinde gesagt für keine gute Idee...


Nicht für jeden Frame. Grafiken, die aktiv gebraucht werden um eine Animation anzuzeigen o.ä. sind natürlich im RAM oder im gecached, aber Grafiken die im Moment nicht gebraucht werden habe ich zu gegebener Zeit von der Platte nachgeladen.

Zitat:
Ideal wäre es, wenn Du den Kram einmalig auf den Graka-Speicher lädst, aber das hängt natürlich stark von der verwendeten API ab, ob das überhaupt geht

Ich verwende Java2D, muss noch in Erfahrung bringen, ob ich den G-RAM nutzen kann.

Irgendwann gehen die Grafiken sicher in den GB Bereich, ich kann mir einfach nicht so recht vorstellen, dass alles immer im Arbeitsspeicher liegen soll. Was sollen dann immer diese langen Ladezeiten(balken) in Spielen wie Gothic o.ä.? Ich dachte dabei werden die benötigten Dinge einfach nachgeladen.

Klar kann ich das machen und mit Performance glänzen, aber dann muss ich auch bei den Specs "mindestens 2GB RAM" hinschreiben, was meinen Kundenkreis sicherlich einschränkt. Scheinbar wird das wohl aber doch so gemacht. Hm..


RE: Java - Spieleentwicklung: Frage! - Fred - 24.05.2010 15:37

JGame schrieb:
Irgendwann gehen die Grafiken sicher in den GB Bereich, ich kann mir einfach nicht so recht vorstellen, dass alles immer im Arbeitsspeicher liegen soll.

OK, Du schreibst also offenbar kein Tetris oder Dr. Mario. Sicher braucht man für komplexere Spiele auch komplexere Systeme zur Verwaltung der Ressourcen. Da ich sowas aber noch nie geschrieben habe, kann ich da keine konkreten Tipps geben. Meine Grafiken sind bisher insgesamt nie über ein paar MB hinausgekommen.


RE: Java - Spieleentwicklung: Frage! - JGame - 24.05.2010 20:53

Hey, danke nochmal für euere Antworten, haben meinem Denkprozess auf ihre weise geholfen.

Nach langem Grübeln und Überlegen bin ich zu dem Schluss gekommen, dass ich mich nicht entscheiden kann. ;D

Ich sehe überall große Vor und Nachteile. Als gewissenloser Informatiker der ich bin mache ich das, was gewissenlose Informatiker nunmal tun: Ich wälze die Entscheidung auf den Benutzer ab. Soll dieser entscheiden, ob er genügend schnellen Arbeitsspeicher opfern oder doch lieber einpaar Ladescreens ertragen kann. Später werde ich mich mal nach Wegen umsehen, die Hardware  zu Scannen um empfohlene Einstellungen angeben zu können.

Das heisst wenn mir nicht noch jemand triftige Gründe für die eine oder andere Methode nennen kann.

So long...


RE: Java - Spieleentwicklung: Frage! - Hannes - 24.05.2010 20:58

vielleicht kannst du ja auch zusätzlich ein paar tests mit der einen oder anderen methode basteln und prüfen, wie die so auf schlechten rechnern performen.


RE: Java - Spieleentwicklung: Frage! - FireTiger - 26.05.2010 18:20

Eventuell könnten auch memory mapped files zur Lösung beitragen.
Da würde dann die Laufzeitumgebung für's Caching sorgen.
Zufälliger Link dazu: http://www.linuxtopia.org/online_books/programming_books/thinking_in_java/TIJ314_029.htm