3 Fragen zu Java

  • Themenstarter Themenstarter crunk33
  • Beginndatum Beginndatum
C

crunk33

Gast
Hallo,

ich bin 12 Jahre alt und möchte Java lernen. Dazu habe ich drei fragen:

1. Welche Bücher könnt ihr mir empfehlen?

2. Welches Programm könnt ihr mir empfehlen um 3D Spiele zu programmieren?

3. Kann man mit Java sehr gute Games machen und sie auch verkaufen?
(z.B. möchte Autorennspiele entwickeln wie Need for Speed oder so...)

Hoffe auf Antworten da ich nach den Osterferien 2012 nachdem ich Java gelernt habe mit der Spielentwicklung anfangen.
 
Welches Programm könnt ihr mir empfehlen um 3D Spiele zu programmieren?
Da gibts kein Programm dafür. Du kannst mit sacehn wie Cinema4D oder blender 3d-objekte erstellen und die dann in Java3D laden. Allerdings sei dir gesagt, dass flüssiges 3d für ein java-spiel ungefähr minecraft-qualität hat. Des weiteren wird sowas wie Need for Speed (wenn du mal die credits anschaust) von mehreren 100 personen entwickelt.

Auch ist Java im vergleich mit C/C++ oder anderen Hardwarenahem sprachen langsam. Um ein akutelles spiel, um auf dein beispiel zurückzukommen, wie etwa NFS TheRun, das in Java gechrieben ist, flüssig mit guter grafik spielen zu können, bräuchtest du einen Prozessor und eine Grafikkarte, die momentan nichtmal in entwicklung sind.

Wenn du also spiele entwickeln willst kannst du Java lernen um in die programmierung einzusteigen und dann später auf C/C++ umsteigen, dich bei EA bewerben und dort entwickeln.

Ich habe "Java von Kopf bis Fuß" gelesen und fand es sehr gut. Klar zu empfehlen.
 
Allerdings sei dir gesagt, dass flüssiges 3d für ein java-spiel ungefähr minecraft-qualität hat.
..
Auch ist Java im vergleich mit C/C++ oder anderen Hardwarenahem sprachen langsam.

Es - ist - nicht - tot - zu - kriegen :noe:

Es gibt sicher Programmteile und Bereiche, wo Java langsamer ist. Aber nur dass eins der bekanntesten Java-Programme (bzw. 3D-Spiele) von einem Hobby-Hacker geschrieben wurde und in einer Klötzchenwelt spielt, sagt noch nicht viel aus. Sowas wie Bytonic Software hat schon etliche Jahre auf dem Buckel, zeigt aber deutlich, was (auch in direktem Vergleich zu C (und wohlgemerkt C, nicht C++)) möglich ist - insbesondere weil das ganze "tolle" an 3D-Spielen ohnehin auf der Grafikkarte läuft, und damit von Java weitgehend unabhängig ist.

Man kann sich ja mal ein betimmtes Spiel ansehen, nämlich das "Benchmark-Spiel" auf Java 7 -serverspeed÷C++ GNU g++speed | ComputerLanguageBenchmarksGame ...

Sei der ganz abstrakt benannte Aufwand, ein "gutes (schnelles) Programm" in C++ zu schreiben im Vergleich zum Aufwand, ein "gutes (d.h. ähnlich schnelles) Programm" in Java zu schreiben mal außen vor gelassen: Als Einzelkämpfer (und Anfänger) kommt man da nicht weit. Aber wenn man die ersten Hürden nicht überspringen sondern umgehen will, kann man sich ja mal sowas wie jMonkeyEngine 3.0 | Java OpenGL Game Engine ansehen.
 
Es - ist - nicht - tot - zu - kriegen :noe:
Mal ganz im ernst, die grafik von den Jake2 ist nicht gerade umwerfend. Für C/C++ gibt es (nur z.B.) die Unreal-Engine3. Des weiteren ist auf windows meist Nvidia PhysX und DX9c+ installiert, was man meines wissens nach in Java einfach nicht verwenden kann, weil es patformbedingt ist.
Und rein logisch gesehen, muss Java lagnsamer sein. Die JavaVM, die in der gelichen geschwindigkeit wie ein anderes maschienencodeprogramm läuft, muss ja den bytecode erst ausführen. Angenommen wir haben diese 2 equivalenten:
Java:
class foo {
    public static void main(String[] args) {
        System.out.println("Hello World");
    }
}
Code:
void main() {
    std.cout << "Hello World\n";
}
Dann sind das (ungefähr) folgende schritte:
Code:
H an ausgabe senden
e an ausagbe senden
...
d an ausgabe senden
linefeed an ausgabe senden
-> also 12 statements
Wenn java 3 maschienencode-statements braucht um 1 java-bytecode statement auszuführen ist Java eben 3mal langsamer als maschienencode.

Bei Office anwendung macht sichd as ja nicht bemerkbar, aber bei spielen denke ich schon.
 
Fakt ist, dass gut programmiertes Java schneller als schlecht programmiertes C ist. Aber auch so braucht Java den Vergleich nicht mehr zu scheuen. Bei so einem kleinem Beispiel wie Tobse schreibt mag das ja so sein, dass C schneller ist, aber die meisten Programme bestehen aus ein bisschen mehr und da macht sich eine gute Speicherverwaltung, JIT-Compiling und viele Sachen die man so in einem C-Programm gar nicht machen kann, bemerkbar. In manchen Fällen ist Java sogar deutlich schneller.

BTW: mein Lieblingskommentar zu diesem Thema war in einem anderen Forum: "Nimm C# weil Java ist interpretiert"
 
Mal ganz im ernst, die grafik von den Jake2 ist nicht gerade umwerfend.

Wie gesagt: Das ist schon etliche Jahre alt, und sieht genau so aus, wie die C-Version! (So war das eben damals 😉 ).

Allgemein über die Vor- und Nachteile und Plattformspezifika zu philosophieren ... ja, das wurde schon in vielen Threads gemacht. Wenn ein bestimmter Teil eines Java-Programms über eine native Lib angebunden werden muss (wie schon bei OpenGL, und vielen anderen) ist das ja auch nicht schlimm.

Aber dazu noch
Und rein logisch gesehen, muss Java lagnsamer sein. Die JavaVM, die in der gelichen geschwindigkeit wie ein anderes maschienencodeprogramm läuft, muss ja den bytecode erst ausführen.

Das berücksichtigt nicht den JIT. Tatsächlich kann eine """interpretierte""" (d.h. zur Laufzeit in echten Maschinencode umwandelnde) Sprache wie Java sowohl theoretisch als auch praktisch schneller sein, z.B. durch automatisches Inlining von monomorphen Methoden, was eine statisch compilierte Sprache mangels Wissen über die Ausführungsumgebung prinzipbedingt nicht machen kann.

Nochmal: Das soll kein pauschales Hochloben von Java sein. Es hat Nachteile, und die können sich auch als geringere Geschwindigkeit bemerkbar machen, aber ebenso wären pauschale Aussagen wie "Java ist langsam, und cooler als Minecraft wird's nicht" ungerechtfertigt.
 
Da gibts kein Programm dafür. Du kannst mit sacehn wie Cinema4D oder blender 3d-objekte erstellen und die dann in Java3D laden. Allerdings sei dir gesagt, dass flüssiges 3d für ein java-spiel ungefähr minecraft-qualität hat. Des weiteren wird sowas wie Need for Speed (wenn du mal die credits anschaust) von mehreren 100 personen entwickelt.

Wie bereits erwähnt gibt es die Jmonkey Engine womit sich Spiele realisieren lassen die deutlich höhere Grafik bieten. Die Grafik von Minecraft wurde übrigens bewusst gewählt und hat nicht etwa mit mangelnden Möglichkeiten zu tun. Hier noch in den Raum geworfen: Ein gutes Spiel braucht keine Highend Grafik sondern ein gut umgesetztes Spielprinzip.

Auch ist Java im vergleich mit C/C++ oder anderen Hardwarenahem sprachen langsam.

Es wird heute sowieso kaum noch ein Spiel in einer Programmiersprache geschrieben. Alles mit C++ zu realisieren dauert einfach viel zu lange. Wen wundert es da das z. B. bei EvE Online ein Großteil in Python implementiert ist?

C++ ist meiner Meinung nach eine schlechte Wahl - vorallem wenn man alleine programmiert. Der Programmieraufwand ist einfach viel zu hoch. An der Stelle kann ich eigentlich nur C# mit Unity3D empfehlen. Damit lassen sich sehenswerte 3D Spiele deutlich einfacher entwickeln als mit C++.

Normalerweise fängt man sowieso erstmal mit 2D Spielen an. Ist schwer genug. Zudem braucht man neben der Programmiersprache auch ein hohes Maß an Mathematik Kenntnissen. Erst nach dem Abitur kann man sich da wenn überhaupt ernsthaft dran wagen.
 
Zuletzt bearbeitet:
@all - warum könnt ihr dem Buben oder dem Mädchen nicht einfach die Info geben ohne hier einen Abklatsch einer bereits mindestens 1.000.000 in diesem Monat (jedenfalls global gesehen) geführten Diskussion runterzwirbeln zu müssen?

@crunk33 - Nein, es ist nicht unmöglich Spiele-Entwickler für Highend-Spiele zu werden. (Irgendwo müssen die ja auch weiterhin herkommen!) Ob Java die richtige Wahl ist oder nicht spielt ganz am Anfang sowieso keine Rolle da du einen Pfad einschlagen möchtest der mit genauso viel Mühen und Anstrengungen verbunden ist wie der eines jeden anderen Hackers auch.

Prinzipiell musst du verstehen wie dein Computer bzw. diese Maschine funktioniert. Nur auf dieser Basis kannst du Spiele entwickeln. Wie beretis angedeutet überschneiden sich also einige Anforderungen aus dem Pfad ein Hacker zu werden und dem eines Spieleentwicklers. Also schau dir zu aller erst folgendes an: How to become a hacker

Wenn du danach noch immer Spiele entwickeln willst, musst du dir bewusst sein, dass Need-For-Speed kein Projekt ist mit dem du anfangen solltest.

Zu aller erst natürlich die Programmiersprache. Durchforste hier im Forum die Bücherecke um herauszubekommen welche Bücher für Anfänger geeignet sind, geh Online-Tutorials durch und bekomme ein erstes Gefühl für deinen Editor/IDE, den Compiler und die Sprache.

Wenn du soweit bist dass du dir denkst, gut, ich kann jetzt schon etwas arbeite das Buch Entwurfsmuster von Kopf bis Fuß durch. IMHO das perfekte Buch um OOP und Design-Patterns kennen zu lernen.

Nachdem die Java-Skills auf einem Level sind, mit dem du arbeiten kannst, schreib erst mal ein Text-Adventure oder irgend ein anderes textbasiertes Spiel. Das ist ein Tipp, da ich aus eigener Erfahrung weiß, dass ein 3D-Spiel zu viele Baustellen für einen Neuling hat als dass er je ordentlich vorwärts kommen kann. Lies dazu z.B. Creating a text adventure

Wenn du dann auch Dinge wie Spielmechanik gemeistert hast, lauern schon die nächste Punkte auf dich.
  • Zeichenlogik
  • Timing
  • Geometrie
  • Trigonometrie
  • Physik

Ich habe gute Erfahrungen mit dem Buch Killer Game Programming in Java.

Für den Mathe-Teil gibt es viele Bücher. Ich werde auf der Uni damit gequält weswegen ich ziemlich trockenen Stoff gewohnt bin und nicht so ganz einschätzen kann ob die folgenden Quellen für dich geeignet sind:

Mathematics for Game Developers
Mathematics for 3D Game Programming and Computer Graphics
Oder schau dir die Liste in dieser Stack-Overflow-Frage durch.

Da du erst 12 bist (und daher jede Zeit der Welt hast um der beste Coder/Spieleentwickler der Welt zu werden), kann es sein, dass du mit dem Stoff nicht so ganz zurecht kommst. Ich kann auch die for Dummy-Bücher empfehlen. Ich hab mir aus Interesse das Physics for Dummies gekauft welches Physik auf Abitur-Level lehrt. (Hatte nur 2 Jahre Physik in der Oberstufe, deshalb.)

Wenn du dich dann da durch gequält hast bist du ein fähiger Programmierer mit einem Grundverständnis in Mathematik und damit für alle GameDev-Frameworks gerüstet.
 
@crunk33 - Nein, es ist nicht unmöglich Spiele-Entwickler für Highend-Spiele zu werden. (Irgendwo müssen die ja auch weiterhin herkommen!) Ob Java die richtige Wahl ist oder nicht spielt ganz am Anfang sowieso keine Rolle da du einen Pfad einschlagen möchtest der mit genauso viel Mühen und Anstrengungen verbunden ist wie der eines jeden anderen Hackers auch.

Prinzipiell musst du verstehen wie dein Computer bzw. diese Maschine funktioniert.
...
Nachdem die Java-Skills auf einem Level sind, mit dem du arbeiten kannst, schreib erst mal ein Text-Adventure oder irgend ein anderes textbasiertes Spiel.

Teilweise stimme ich da zu: In mancher Hinsicht ist die Sprache wirklich nicht so wichtig. Ich finde aber, dass auch nichts dagegen spricht, sich gleich mit 3D-Grafik zu beschäftigen - in dem Sinne, dass man sich irgendwo einen "Stub" kopiert der ein Fenster aufmacht und eine Kugel rendert, und man sich dann auf das Programmieren irgendwelcher GLSL-Shader stürzt (Design Patterns? WTF? 😉 ). Früher oder später (d.h. bei echten Spielen) hilft einem das auch nichts, aber genaugenommen ist es ja gerade das, was einem einzlnen das komplette Ausprogrammieren von sowas wie NeedForSpeed unmöglich macht: Man müßte sich mit IO, GUI-Design und OOP auskennen, Shadern, Physik und Kollisionserkennung, vielleicht noch Netzwerksachen... und eigentlich auf jedem dieser Gebiete ein Experte sein und nebenbei noch 50 Jahre Zeit haben 😉 Aber man kann sich ja für den Anfang auf das fokussieren, was einen am meisten interessiert.

EDIT: Wegen der extremen Mathe-Lastigkeit ist 3D-Programmierung (und einige andere der genannten Punkten) vielleicht schwierig, wenn man in der Schule gerade Bruchrechnen lernt, aber... das ist ein anderer Punkt...
 

Zurück
Oben