4 Stimmen

Lohnt es sich, eine kleine C#-"Engine" nach C++ oder ähnlichem zu portieren?

Nach einem Tutorial, das ich auf MSDN gefunden habe, habe ich so etwas wie eine "Engine" mit DirectX und C# erstellt. Ich habe nicht gesehen, eine Menge von dieser Art von Sache (Persönlich, das heißt) in C# getan und die Mehrheit scheinen C/C++ zu bevorzugen, so bin ich neugierig, ob mit C# wird zurück kommen, um mich zu beißen, oder ob ich einfach weitergehen sollte?

Der Grund, warum ich frage, ist, dass das Tutorial ziemlich plötzlich aufgehört hat, und so gibt es eine Basis von etwas, aber es ist klein genug, um ohne viel Aufwand portiert zu werden. Ich selbst mag C#, aber ich weiß nicht, ob es etwas gibt, das alle anderen wissen, was ich nicht weiß.

3voto

Robert Gould Punkte 66858

Nun, Peter, der Hauptgrund ist, dass C++ plattformunabhängig ist, während C# es trotz Mono nicht im eigentlichen Sinne ist (ich glaube nicht, dass man Mono C# auf den meisten Handys, dem Nintendo DS oder der Playstation3 ausführen kann).

Wie auch immer, die meisten dieser Engines unterstützen DirectX und OpenGL und/oder Software-Renderer, sie sind also von Grund auf so konzipiert, dass sie unabhängig sind. Aber wie bei jedem agnostischen System, erfordert dies eine Menge Aufwand und Ressourcen.

Nach dem, was du sagst, ist deine Engine C# + DirectX, was bedeutet, dass deine Engine im Moment auf PC, Xbox, Zune und einigen Windows-Handys laufen kann. Um ehrlich zu sein, ist das keine schlechte Auswahl an Plattformen. Wenn Sie also mit diesem Grad an Freiheit zufrieden sind und C# gegenüber C++ bevorzugen, können Sie genauso gut bei dem bleiben, was Sie haben, und die Zeit damit verbringen, Ihre Engine zu verbessern. Wenn Sie Ihre Engine jedoch auf einer anderen Plattform als Microsoft betreiben wollen, müssen Sie irgendwann den Sprung zu C/C++ machen.

Um eine Vorstellung davon zu bekommen, wovon ich spreche, unterstützt die Engine meines Teams Xbox, PS3, Wii, PSP, PC und möglicherweise auch andere Plattformen, wenn wir uns die Mühe machen, aber wir haben 15 Vollzeit-Ingenieure, die daran arbeiten, also... Sie sehen, es ist ein großer Aufwand. Wenn Sie so etwas für ein kostenloses Projekt benötigen und C++ kennen, können Sie eine der vielen Open-Source-Engines wie Ogre oder Irrlicht ausprobieren, die es gibt.

1voto

Klathzazt Punkte 2385

Ich schlage vor, bei dem zu bleiben, was Ihnen vertraut ist. Die Verwendung von C oder C++ sollte in Ihrer Situation nur dann in Betracht gezogen werden, wenn Sie beabsichtigen, einige Funktionen auf niedrigerer Ebene zu implementieren, wie z. B. Ihre eigene Bildverarbeitung oder die Erstellung benutzerdefinierter Filter oder Transformationen (je nachdem, wofür Sie Directx verwenden).

Grafische Anwendungen können rechenintensive Aspekte haben. Die meisten dieser Probleme wurden in der DirectX-API gelöst, die genauso schnell ist, wenn man sie in C++ oder C# verwendet.

Wo Sie die Sprache auf niedrigerem Niveau betrachten würden: Wenn Sie eine Bildverarbeitung erstellen, die nativ schneller durchgeführt werden könnte - dies gilt nur, wenn sie nicht von der Directx-Api angeboten wird, wie z. B. die Erstellung einiger benutzerdefinierter Encoder/Decoder. In diesem Fall könnten Sie die benutzerdefinierte Komponente in einer anderen Sprache erstellen und sie dann separat in Ihre C#-Anwendung laden. In diesem Fall sollten Sie die Verwendung von C++ Intrinsics in Betracht ziehen, mit denen Sie für Ihre CPU programmieren können, und auch einen Blick auf GPGPU-APIs wie CUDA werfen.

1voto

Walt D Punkte 4037

Als Hobby-Spieleentwickler bevorzuge ich C# (mit einer Drittanbieter-Bibliothek namens SlimDX) gegenüber C++. Ja, ein Spiel, das in gut optimiertem C++ geschrieben wurde, läuft wahrscheinlich besser als das gleiche Spiel, das in gut optimiertem C# geschrieben wurde. Aber die Zeit, die ich durch die Verwendung von C# einspare (ich schätze mal grob 30-40 %), kann ich nutzen, um meine Algorithmen so zu optimieren, dass ein C#-Spiel tatsächlich schneller läuft, als wenn ich es in der gleichen Zeit in C++ geschrieben hätte.

Wie bereits erwähnt, gibt es auch Probleme mit der plattformübergreifenden Kompatibilität, da ein C#-Spiel in der Praxis nur auf Microsoft-Plattformen läuft.

Ein weiteres Problem ist, dass, wenn Sie Ihre Anwendung in C# schreiben, das .Net Framework auf den Computern installiert sein muss, auf denen sie läuft. Dies kann die saubere Verteilung Ihrer Anwendung etwas erschweren, obwohl dies keineswegs ein unüberwindbares Hindernis darstellt.

0voto

Mischa Kroon Punkte 1784

Es gibt ein paar Studios, die c# für Spiele verwenden.

Sie können auch einen Blick auf XNA werfen, es gibt auch eine Portierung der Quake3-Engine, die im Internet kursiert und auf c# portiert wurde.

Es sollte also in Ordnung sein.

0voto

HS. Punkte 2553

Wenn Sie sich in C# wohler fühlen und es keine Leistungsprobleme gibt, die Sie zwingen, zu einer Sprache zu wechseln, die näher an der CPU liegt, dann sehe ich keine Notwendigkeit zu wechseln.

Je nachdem, was Sie in der Zukunft vorhaben und wie weit diese Engine entwickelt werden soll, könnte sich dies jedoch dramatisch ändern und C# könnte sich als die falsche Wahl erweisen. Aber das kann nur die Zeit zeigen, leider. Die richtige Einschätzung erfordert viel mehr Details über die aktuelle Implementierung und über Ihre zukünftigen Pläne.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X