Ich lerne gerade Java(schulisch) und überlege, ob ich mit c# oder c++ weiter machen will. Wofür ist was besser?

...komplette Frage anzeigen

5 Antworten

Erstmal vorweg: Du wirst zu dem Thema von 10 Leuten 10 verschiedene Meinungen hören. :)

Ich habe jetzt auch keine Lust eine lange Antwort zu schreiben, nur wo viel:

- ein Spiel läuft am besten, wenn in kurzer Zeit möglichst viele Operationen ausgeführt werden können

- das impliziert Hardwarenähe

- C++ ist von deinen genannten drei Sprachen die mit Abstand Hardware-Nächste

- gerade bei Grafikengines ist es empfehlenswert, Operationen, Pfade und Timings halbwegs akzeptabel vorhersagen zu können

- diese Vorhersage geht wegen dem GC in Java oder C# oftmals nicht

So, und nach dieser Logik wäre die optimale Programmiersprache für Spiele eindeutig Assembler. Aber das ist offensichtlich quatsch. Also gibt es noch weitere Punkte zu beachten:

- wie sieht die Tool-Unterstützung deiner Wahlsprache aus?

- kann man in der Sprache relativ zügig und komfortabel programmieren?

- ist es leicht Fehler zu machen, und sind Fehler leicht auszumerzen?

Wenn du nur die erste Liste betrachtest, wäre die Ideale Sprache C++, aber nach der zweiten Liste wären C# und Java optimal (wobei hier auch C++ nicht schlecht abschneidet).

Du kannst also nicht fragen: "Welche Sprache ist für Spiele ideal?". Das musst du genauer definieren! Wenn du die Sprache nur als Klebstoff für Funktionen einer fertigen Engine verwenden willst, ist es fast völlig egal, welche Programmiersprache du einsetzt, sofern deine Wunschengine überhaupt Bindings für so eine Sprache anbietet.

In so einem Falle ist vielleicht wirklich eine einfachere Sprache wie Java oder C# angebracht.

Wenn du hingegen deine eigene Engine entwickeln willst, würde ich auf jeden Fall ganz eindringlich zu C++ raten. Denn alles was du in deiner Engine mit C# oder Java anstellen kannst, WIRD definitiv besser und schneller mit C++ laufen!

Ich hatte vor einigen Jahren mal persönlichen Kontakt mit Cliffy B. Das war damals der Chefentwickler der Unreal-Engine. Und weil für diese Engine die Performance das A und O ist, gibt es dort tatsächlich einige Teile, die in Assembler geschrieben sind, weil nicht mal C++ ausreichend ist.

Für ein einfaches 2D Jump'n'Run würde allerdings die SDL sogar mit Python als Klebstoff ausreichen.

Fazit: Die Wahl deines Werkzeuges hängt von den Anforderungen ab! Es wäre nicht klug, eine 3D-Engine in Java oder C# zu implementieren, weil man eher früher als später im Flaschenhals stecken bleiben wird. Genauso wäre es nicht klug, so ein Schwergewicht wie C++ als "Klebstoff" zu missbrauchen, obwohl fast alle Operationen an eine Bibliothek delegiert werden.

Was du unter "Spiel programmieren" verstehst, kannst du dir nur selbst beantworten, und ich hoffe, meine Antwort gibt dir zumindest einen roten Faden zur Hand, mit dem du dich bei Google oder in der Wikipedia weiter informieren kannst.

Noch eine Bemerkung zum Schluss: Wenn du solche Fragen stellst, werden dir viele Leute antworten, die "nur" eine einzige Programmiersprache wirklich beherrschen oder anderweitig einen sehr begrenzten Horizont haben.

Solche Menschen antworten oft mit: "Programmiersprache ABC ist eh die beste! Hab damit schon XYZ programmiert!". Wobei solchen Leuten oft der Blick auf andere Gebiete versperrt ist.

Ich halte solche Antworten aber für gefährlich, gerade für andere Anfänger (wie dich), denn sie suggerieren Fachwissen, was nur oberflächlich oder zumindest fast ausschließlich auf einem stark eingegrenzten Gebiet vorhanden ist.

Bevor du ein Projekt startest, mach auf jeden Fall eine Anforderungsanalyse! Dazu zählt auch die Wahl der geeignetsten Programmiersprache, was du ja mit deiner Frage hier bezweckst. Du solltest weise alle Punkte wie Performance, Benutzerfreundlichkeit, usw. mit einbeziehen.

Viel Spaß bei deiner "Spiele-Programmierung"! :)

TeeTier 20.10.2015, 06:48

PS: Noch ein kleines Beispiel zum Speicherverbrauch von Java und C++ Objekten:

class JavaByte {
public byte foo = 0;
}
// ...
JavaByte jb = new JavaByte();

... das selbe in C++:

class CppByte {
public: char c = 0;
};
// ...
CppByte cb;

Die Frage lautet: Wie viel Speicher belegt die Variable jb im Java-Programm, und wie viel Byte belegt cb im C++ Programm?

Die Antwort: jb bei Java belegt 20 Byte und cb bei C++ belegt ein einziges Byte.

Selbst wenn wie obigen Code abändern und cb im C++ Beispiel auf dem Heap ablegen, benötigen wir "nur" 8 Byte auf einer 32 Bit Plattform und höchstens 16 Byte auf einer 64 Bit Plattform. Bis vor kurzem hat Java sogar noch 24 Byte für obiges Beispiel benötigt, aber die neueren Java-Versionen können recht effizient Zeiger "komprimieren", was im hier vorliegenden Falle eine Einsparung von 4 Byte bringt.

Wie du siehst, bedeutet Performanz nicht nur Geschwindigkeit, sondern auch Speicherverbrauch. Und bei einigen Millionen Objekten macht sich dann plötzlich jedes Byte zu viel bemerkbar!

1

Alles hat vor- und nachteile. Da du spiele programmierwn willst empfielt sich Java. Ich kenne mich mit Java inzwischen einigermaßen gut aus und muss sagen das ich bis jetzt erst einmal an javas grenzen gestoßen bin. Ich habe eine 3D-Engine in Java entwickelt und hatt mit komplexen Shadern und 3.5 millionen Vertices noch gute 60 fps. Ganz selten sind sie engebrochen auf 40. Javas Peformance-Probleme wirst du bei 2D-Spielen nie zu spüren bekommen. Zude  ist Java wesentlich einfacher als c++. Bei der Simplen Spiele Programmieren ist meiner Meinung nach das einzige Pro Visual Studio. Java hat eone schön einfache Syntax und wenn ihr sowieso Java programmiert, dann würde ich dir vom Umsteigen abraten. Mit C# kenne ich mich nicht so gut aus. Aber Java ist schon echt was gutes und du sparst dir ziemlich viel Arbeit. Java regelt vieles im Hintergrund, was du bei andernen Programmiersprachen alles selber machen musst und es ist Plattformunabhängig. Wie schon gesagt: solange es kein Crysis oder Battlefield wird kannst du mit Java ohne Probleme und vor allem schnell Programmieren.

LG Actyc

Die beste Spieleengine ist Cryengine und Unreal. Cry hat die Nase vorne in sachen Workflow. Unity ist in meinen Augen Müll. Beim programmieren solltest du C++ wählen, weil das die meist verwendete Sprache ist. 

grtgrt 20.10.2015, 00:56

... aber auch die, mit der man am ehesten Fehler machen kann (und die dann lange zu suchen hat). 

0

Dein Ziel ist die Spieleprogrammierung. Deshalb empfehle ich dir C#.

Warum? Weil Unity C# als Sprache unterstützt.

Abgesehen davon ist Visual Studio für das "normale" Programmieren die mit abstand beste IDE weit und breit.

DU glaubst es wäre leichter, mit C++ ein Spiel zu programmieren!?

PerfectMuffin 19.10.2015, 18:35

Die Leute nehmen C/C++/ASM o.ä. , wenn es extreme Profis sind, die starke low-level Module bauen wollen, Java, wenn sie ohne umschweife portieren möchten oder mobile Spiele entwickeln wollen, C#(mit Unity) und AS3/Haxe oder HTML5 und JavaScript wenn sie für den Browser programmieren wollen, für Desktopspiele kommt absolut alles in Frage.

Außerdme ist zu beachten, dass jede Sprache ihre eigenen extraAPIs hat, die normalerweise bezeichnend für die Progrmamiertechnik sind(Engines oder Libs wie LWJGL)

0

Was möchtest Du wissen?