Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

20.02.2013, 14:38

Lohnt sich C++ für 2d?

Ich bin gerade dabei ein kleines 2d Rollenspiel in Java mit LWJGL zu schreiben und hab mich in diesem Vorgang auch ein bisschen mehr mit Informationen zur Spieleprogrammierung beschäftigt. Fakt ist ja, dass C++ "low-leveler" und deshalb schneller als Java ist (aktuell ~10% kann das sein?), allerdings braucht man für ein 2d Spiel nicht die Rechenkraft wie für ein aufwendiges 3d. Für diesen relativ kleinen Geschwindigkeitsvorteil müsste man die angenehme Programmierung mit Java und seinen vielen Frameworks aufgeben.

Lohnt es sich deshalb überhaupt noch für nicht grafisch aufwendige Spiele C++ zu benutzen?

ps: resource* ist Zensiert?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

20.02.2013, 14:45

Nein, lohnt sich nicht. Ressourcen schreibt man im Deutschen mit zwei 's'.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Schrompf

Alter Hase

Beiträge: 1 470

Wohnort: Dresden

Beruf: Softwareentwickler

  • Private Nachricht senden

3

20.02.2013, 14:51

Der Geschwindigkeitsvorteil dürfte eher Faktor 10 sein... sowohl für Java als auch für C++, je nachdem, welche Sprache Du tatsächlich beherrschst und idiomatisch benutzen kannst. Von daher lautet für Dich ganz persönlich der einzig sinnvolle Hinweis: bleib bei der Sprache, mit der Du vertraut bist.

Ich habe Java immer als sehr umständlich und mühsam empfunden, nicht etwa als angenehm. Aber ich vermute, das ist eine Frage der persönlichen Vorlieben.
Häuptling von Dreamworlds. Baut aktuell an nichts konkretem, weil das Vollzeitangestelltenverhältnis ihn fest im Griff hat. Baut daneben nur noch sehr selten an der Open Asset Import Library mit.

4

20.02.2013, 15:37

Also ich finde C++ deutlich "angenehmer" als Java. Es kommt mir viel geordneter vor und auch bei Bibliotheken hat man eine bessere Auswahl. Von der Geschwindigkeit macht das bei 2D kaum einen Unterschied.
Ich würde in jedem Fall C++ nehmen, aber das ist halt mein persönlicher Geschmack. Wenn du allerdings mal Spiele für Android entwickeln willst, kommt man mit Java besser voran.

5

20.02.2013, 16:15

Ja, ist Geschmacksfrage. Wenn du richtig optimierst, wirst du mit Java zwar wohl nie C++ in Sachen Geschwindigkeit schlagen können, einfach, weil C++ tiefer ansetzt und du mehr Möglichkeiten hast. Aber was die übliche Spiellogik und so angeht, da brauchst du dir ohnehin keine Gedanken zu machen. Quasi alle Geschwindigkeitsprobleme in Sachen Spiellogik entstehen auf einer viel höheren Ebene, und mit schlechtem Design ist auch C++ langsam.
Also prinzipiell mag C++ noch immer schneller sein, praktisch ist das aber lange nicht mehr so wichtig.

Was wichtig ist, ist natürlich die Sprache ansich. Hier unterscheiden sich die Geschmäcker. Meine persönliche Meinung ist, dass Java unglaublich fummelig ist und man tendenziell viel schreiben muss, allerdings gibt es eine echt umfangreiche Standardbibliothek, so das es für viele Probleme eine schnelle Lösung gibt. Außerdem bietet z.B. Eclipse viele Komfortfunktionen und man hat in der Regel kaum Probleme, ein korrekt geschriebenes Programm irgendwo zum laufen zu bringen.

C++ finde ich von der Sprache her eleganter und einfach schöner zu benutzen, aber man muss sagen, dass das ganze Buildsystem echt veraltet und sehr fummelig ist. Alleine, dass es sowas wie CMake geben muss ist ganz ganz schlecht. Die Sprache ist sehr komplex und du hast viele Möglichkeiten etwas falsch zu machen, aber wenn du sie beherrschst kannst du vieles sehr viel eleganter lösen als in Java. Bis dahin ist es aber natürlich ein langer Weg.
Lieber dumm fragen, als dumm bleiben!

6

20.02.2013, 16:52

Vielen Dank schonmal für euere Anworten.

Das komplexe Kompilen war auch etwas was mich abgeschreckt hat, wenn man den Komfort von Eclipse/Intellij gewöhnt ist.

Wie ich das jetzt so gesehen habe, werden eigentlich nur C++ oder Flashprogrammierer für Spiele gesucht. Ich gehe mal davon aus, dass es keine zahlenreichen Stellen als Javaentwickler ausser Serversysteme oder Android gibt, oder?

Als weitere Frage würde mich mal interessieren, was man so als Programmierer mit Bachlor in der Spielebranche verdient.

Evrey

Treue Seele

Beiträge: 245

Beruf: Weltherrscher

  • Private Nachricht senden

7

20.02.2013, 17:02

Würde ich D beherrschen, wäre dies wohl jetzt die Sprache meiner Wahl, wenn gleich dies bedeuten würde, viele Bindings zu Bibliotheken selbst zu schreiben. C++ und Kaffee sind mir beide bekannt und in beiden habe ich gearbeitet. Genug um für mich deutlich herauszufinden, dass Kaffee ein Graus ist, dem ich nicht für seine große Bibliothek verzeihen kann.
Aber zur eigentlichen Frage:
Der Wunsch nach Leistung ist nur in äußerst seltenen Fällen für technisch äußerst anspruchsvolle 2D-Spiele gegeben, wie ich sie nie bis kaum gesehen habe. Entweder bist du wahnsinnig, leistungsfanatisch, oder du brauchst keine höchst performante Sprache der Performance wegen. Die Wahl der Sprache sollte demnach wie hier die anderen Weis machen darauf fallen, welche Sprache dir eher zusagt. Kriterien sind da Bequemlichkeit und zeitlicher Aufwand. Nimm das, was dir gefällt, und womit du schneller voran kommst (letzteres ist der Hauptgrund, weshalb ich noch nichts Nennenswertes in D entwickle).

Edit:

Zitat

Das komplexe Kompilen war auch etwas was mich abgeschreckt hat, wenn man den Komfort von Eclipse/Intellij gewöhnt ist.
Das ist nun wirklich kein Argument. Eclipse nimmt dir da wie auch jede C++-IDE viel Arbeit ab. Du haust auf 'nen Button, und das Programm kompilliert und startet, ohne großartig was einstellen zu müssen. Kompilliere mal ein Java-Programm per Konsole und sag das nochmal.

C-/C++-Quelltext

1
2
3
4
int main(int _argc, char** _argv) noexcept {
  asm volatile("lock cmpxchg8b %eax");
  return 0;
} // ::main
(Dieses kleine Biest vermochte einst x86-Prozessoren lahm zu legen.)

=> Und er blogt unter Hackish.Codes D:

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

8

20.02.2013, 18:07

Es hängt natürlich davon ab, was genau man machen will, aber die Performance ist meiner Erfahrung nach heutzutage eher nebensächlich. Man kann in C# und wohl auch in Java Code schreiben, der in der Regel schnell genug ist. Vorteil dieser beiden Sprachen gegenüber C++ ist auf jeden Fall, dass sie wesentlich einfacher zu lernen sind, weshalb im Moment C# meine Empfehlung für die meisten Programmieranfänger ist.

Aber: C# und Java sind für die schnelle und einfache Entwicklung spezialisierter Anwendungssoftware gedacht und dafür auch wunderbar. Für die Spieleentwicklung eignen sich beide Sprachen aber imo rein prinzipiell weniger gut und zwar aus folgendem, einfachen Grund: Garbage Collection. Abgesehen davon, dass Garbage Collection in professionellen Spielen aufgrund der unvorhersehbaren Performancecharakteristik (für den Hobbybereich allerdings wohl weniger bis kaum relevant) eher ein Dealbreaker ist, gibt es in Sprachen mit Garbage Collection ein imo ganz fundamentales Problem und zwar Ressourcenverwaltung (oh, the irony). Das mag in den Bereichen, auf die Java und C# abzielen, von weniger großer Wichtigkeit sein, in Spielen ist das allerdings ein ganz wesentlicher Aspekt. Wenn du einfach nur möglichst unkompliziert ein Spiel umsetzen möchtest, dann nimm eine Engine oder ein komplett fertiges Toolkit wie z.B. Unity und du wirst glücklich. Aber wenn du dich mit der Technik im Hintergrund auseinandersetzen willst, dann würde ich persönlich von C# und ganz besonders Java wehement abraten, da in diesen Sprachen kein brauchbarer Ansatz für Ressourcenmanagement existiert und sehr wahrscheinlich nie existieren wird. Da du mit LWJGWL arbeitest, ist dir ja vielleicht schon aufgefallen, wie umständlich der Umgang mit Texturen, VBOs, FBOs, Shadern etc. wird, sobald man sicherstellen will, dass unter allen Umständen alles auch wieder ordentlich freigegeben wird...

C++ finde ich von der Sprache her eleganter und einfach schöner zu benutzen, aber man muss sagen, dass das ganze Buildsystem echt veraltet und sehr fummelig ist. Alleine, dass es sowas wie CMake geben muss ist ganz ganz schlecht.

Auch wenn ich nachvollziehen kann, wieso es auf den ersten Blick so wirkt, so sind "veraltet" und "fummelig" keine Attribute, die ich dem C++ Buildmodel zuschreiben würde, viel eher: "Missverstanden". Zugegeben: Es ist komplexer als das anderer Sprachen, aber dafür auch extrem mächtig. CMake ist gut gemeint, aber imo ein völlig fehlgeleiteter Ansatz, der vermutlich genau aus so einem Missverständnis heraus geboren wurde. Wir haben es mittlerweile an einen Punkt gebracht, wo wir sowas wie IDEs haben, damit wir eben gerade nicht für jeden Mist irgendein Skript anfassen müssen. CMake degradiert meine IDE zum Texteditor und das ist im 21. Jahrhundert imo inakzeptabel. Verschiedene Plattformen bedeutet unterschiedliche Toolchains, benötigen unterschiedliche Buildsysteme. Das liegt in der Natur der Sache und das lässt sich auch mit Metabuildsystemen wie CMake nicht vermeiden, nur verschleiern. Zeig mir ein CMake-basiertes System für ein nichttriviales Projekt auf unterschiedlichen Plattformen, das nicht von if (PlatformA) ... elseif (PlatformB) ... durchzogen ist. Ich für meinen Teil hab jedenfalls noch nie an einem Projekt gearbeitet, in dem CMake mir etwas anderes als Schmerz bereitet hätte... ;)

Die Sprache ist sehr komplex und du hast viele Möglichkeiten etwas falsch zu machen [...]

Das ist in der Tat das größte Problem von C++.

Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »dot« (20.02.2013, 18:33)


H5::

Treue Seele

Beiträge: 368

Wohnort: Kiel

  • Private Nachricht senden

9

20.02.2013, 18:32

Auch wenn es jetzt etwas am Thema und der Frage vorbei ist, für dein Spiel hast du dich ja schon einmal festgelegt. So wie es klingt willst du dich ja Beruflich und privat mit der Programmierung beschäftigen. Da wird es nicht ausbleiben das die Frage nach der Sprache kaum noch relevant ist, früher oder später wirst du eh etwas in verschiedenen machen.

Viel wichtiger ist es, dass du die Programmierung an sich verstehst und das passiert nur durch Lernen und Üben. Die Sprache die dir gefällt wird sich dann schon rauskristallisieren.

Was Java angeht mag ich die Sprache auch nicht so gerne, da finde ich C# z.B. deutlich angenehmer. Und auf deine Frage bezogen ist C# eventuell ein interessanter Mittelweg. Man kommt leichter näher an das System und hat gute Bibliotheken. Zudem gibt es .Net und Mono. Und in der Spiele Industrie ist es glaube ich (hab da keine Erfahrungen) ein wenig gängiger als Java. Auch unterstützt C# soweit ich das zumindest jetzt weiß mehr Programmierparadigmen als Java was dir den späteren Einstieg in eine andere Sprache leichter machen könnte.

Ich wurde damals nach dem Studium (sehr Assembler/C lastig) einfach an Ada95 gesetzt und… mach mal. Und bis jetzt finde ich von der Sprache Ada mit am schönsten. Auch wenn sie sich ein gutes Stück von C/C++ unterscheidet erkennt man recht schnell viele Konzepte wieder.

Ich denke es ist wichtig sich nicht absolut fest zu legen sondern zu erkennen was einem gut liegt, aber alles andere nicht außer Acht zu lassen. Versuch am besten immer zu ergründen (so wie du es ja schon mit deiner Frage machst) Für was lässt sich welche Sprache am besten verwenden und dann nutze sie. Wenn du bei Spielen bleibst kommst du da eh nicht drum rum ;) … Schader Sprachen, Script Sprachen und dann die verbindende Programmiersprache.. eventuell noch eine Datenbankabfragesprache.
:love: := Go;

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

10

20.02.2013, 20:33

Würde ich D beherrschen, wäre dies wohl jetzt die Sprache meiner Wahl, wenn gleich dies bedeuten würde, viele Bindings zu Bibliotheken selbst zu schreiben.

Wegen D:
Da findet man sich sehr sehr schnell zurecht und viele Bindings existieren schon. Zudem ist das erstellen von solchen sehr einfach.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

Werbeanzeige