2D Engine

Darkas

Erfahrenes Mitglied
Hi!

Ich möchte als nächstes mal eine 2D Engine Programmieren. Jedoch stellen sich mir da erstmal ein paar Fragen:

Wie Programmieren: Soll ich GDI+ nehmen? Oder gibts da noch was besseres?

Fullscreen: Ja, wie soll ich den Hinbekommen? Wird schwierig mit Windows Forms oder?

Wie das ganze überhaupt Managen: ich hab heute ein Webcast über XNA gesehen, da haben sie erklärt das in 3D Engines Schleifen für das Zeichnen und Updaten verwendet werden? Macht dass auch in 2D sinn?
 
Dein Posting zeigt, dass du dich noch nicht ausreichend mit Programmierung auseinandergesetzt hast. Bevor du dir also so eine relativ komplexe Aufgabe wie die Entwicklung einer Grafik-Engine stellst, solltest du dir die Grundlagen erarbeiten.

Die Kritik im Detail:

Wie Programmieren: Soll ich GDI+ nehmen? Oder gibts da noch was besseres?
Wenn du mit dem .NET-Framework arbeitest, verwendest du automatisch GDI+ (Namespace System.Drawing).

Fullscreen: Ja, wie soll ich den Hinbekommen? Wird schwierig mit Windows Forms oder?
Fullscreen ist möglich -- die Frage ist, was du außerdem noch alles erreichen willst.

ich hab heute ein Webcast über XNA gesehen, da haben sie erklärt das in 3D Engines Schleifen für das Zeichnen und Updaten verwendet werden? Macht dass auch in 2D sinn?
Schleifen muss man dauernd bei irgendwelchen Gelegenheiten einsetzen; "Zeichnen und Updaten" ist jedoch kein Job, den eine "Schleife" leisten kann. Eine Schleife tut nichts anderes, als bestimmte Anweisungen zu wiederholen. Was für Anweisungen das sind, entscheidet der Entwickler. Natürlich kann es sich um Zeichenoperationen handeln.

-Gawayn
 
Dein Posting zeigt, dass du dich noch nicht ausreichend mit Programmierung auseinandergesetzt hast. Bevor du dir also so eine relativ komplexe Aufgabe wie die Entwicklung einer Grafik-Engine stellst, solltest du dir die Grundlagen erarbeiten.
:eek: Was? Woher kommt dass denn? Ich hab mittlerweile schon so viele rekursive Funktionen u.ä. auf dem Buckel, dass ich mich sicherlich auch daran versuchen kann.
Wenn du mit dem .NET-Framework arbeitest, verwendest du automatisch GDI+ (Namespace System.Drawing).
Nein, ich kann GDI+ verwenden, aber Alexander hat ja gemeint es gibt noch SDL.NET, dass werd ich mir dann auch mal anchaun.
Fullscreen ist möglich -- die Frage ist, was du außerdem noch alles erreichen willst.
Was ich noch alles erreichen will? Was meinst du damit? Ich will erstmal eine RPG-Engine basteln, mit einer Auflösung von 320x240 und mit Fullscreen. Aber wie soll ich das bewerkstelligen? FormBorderStyle = None und WindowState = Maximized? Oder gibt's ne elegantere Lösung?
Schleifen muss man dauernd bei irgendwelchen Gelegenheiten einsetzen; "Zeichnen und Updaten" ist jedoch kein Job, den eine "Schleife" leisten kann. Eine Schleife tut nichts anderes, als bestimmte Anweisungen zu wiederholen. Was für Anweisungen das sind, entscheidet der Entwickler. Natürlich kann es sich um Zeichenoperationen handeln.
An dieser Stelle meinte ich den game loop, danke Alex. Und jetzt ist meine Frage ob ich den Game Loop auch in einer 2D Engine benötige, oder ob sich dass anders besser regeln lässt.
 
Nein, ich kann GDI+ verwenden, aber Alexander hat ja gemeint es gibt noch SDL.NET, dass werd ich mir dann auch mal anchaun.
Na ja, sicherlich -- SDL.NET hat aber nichts mit Windows Forms zu tun, sondern ist nichts anderes als eine Kapselung von DirectX (zumindest unter Windows, unter anderen Plattformen OpenGL etc.). Da du von Windows Forms sprachst, habe ich an DirectX nicht gedacht -- verständlicherweise, wie ich finde. Windows Forms ist eine Kapselung der Win-API, somit dem GDI. DirectX (oder SDL) ist was anderes.

Was ich noch alles erreichen will? Was meinst du damit?
Damit meine ich, welche technischen Anforderungen du außerdem noch stellst. Wenn du natürlich eine vollwertige Grafik-Engine bauen willst, wäre Windows Forms (und somit GDI) die falsche Wahl, denn abgesehen von den beschränkten technischen Möglichkeiten gibt es dort keine vollständige Hardware-Beschleunigung.

Und jetzt ist meine Frage ob ich den Game Loop auch in einer 2D Engine benötige
Da kann ich nur wiederholen und somit in eine Schleife eintreten: Eine Schleife wiederholt Anweisungen und macht nix sonst. Allerdings gibt es keine "Wahlmöglichkeit", ob ich Schleifen verwenden will oder nicht. Wenn du in dein Programm keine Schleife einbaust, wird es schlicht und ergreifend ungefähr eine Zehntelsekunde lang laufen und sich dann sofort beenden. (Es sei denn, du baust irgendwelche blockierenden Befehle ein, aber das macht ja keinen Sinn.) Eben weil nichts wiederholt wird. Daher mein Rat, dich zunächst einmal mit den Grundlagen auseinanderzusetzen. Dass du das Prinzip der Rekursion kennst, ist ja ein guter Start.

Die *Engine* benötigt natürlich keine *Game Loop*, denn sie ist ja kein Game. Die *Game Loop* gehört ins Hauptprogramm. Das heißt natürlich nicht, dass die Engine keine Schleifen benötigen würde.

Der Begriff "Game Loop" macht keinen großen Sinn. Jedes Programm benötigt wiederholte Ereignisverarbeitung etc. etc. etc., so dass die Game Loop sich prinzipiell in keiner Weise von sonstigen Schleifen unterscheidet.

-Gawayn
 
Zuletzt bearbeitet:
Programmier doch eine 2D Engine mit XNA. Da wirst du es am Anfang schon schwer genug haben, du hast für XNA total viele Quellen, da Microsoft seine Technologie natürlich pusht ohne Ende. Entsprechende Links entnimmst du der Linkliste, die du hier im .NET Forum findest.
 
Ja, das schwebt mir auch schon länger im Kopf rum, aber is das nicht zu viel? Ich meine das ist ja so, als ob man mit ner Panzerfaust auf die Jagt geht :) Ich hab ja da so viele Klassen die dann nicht genutzt werden, ist da nicht die Speicherbelastung viel zu groß?
Aber das wäre eigentlich nicht schlecht, da müsste ich die Game Loop wenigstens nicht selbst machen :)

Mir fällt aber grad noch was ein: ich brauche natürlich auch eine Scriptsprache. Ich weiß sogar, wie ich die mit OOP implementieren kann, aber ich müsste dazu ja die einzelnen Anweisungen mit string.split auseinandernehmen, und ich glaube, dass doch ein wenig zu langsam ist. Gibt's da vielleicht noch ne Komfortablere lösung, oder muss ich dass so über Stringzerlegung machen?
 
Ja, das schwebt mir auch schon länger im Kopf rum, aber is das nicht zu viel? Ich meine das ist ja so, als ob man mit ner Panzerfaust auf die Jagt geht :) Ich hab ja da so viele Klassen die dann nicht genutzt werden, ist da nicht die Speicherbelastung viel zu groß?
Aber das wäre eigentlich nicht schlecht, da müsste ich die Game Loop wenigstens nicht selbst machen :)

Mir fällt aber grad noch was ein: ich brauche natürlich auch eine Scriptsprache. Ich weiß sogar, wie ich die mit OOP implementieren kann, aber ich müsste dazu ja die einzelnen Anweisungen mit string.split auseinandernehmen, und ich glaube, dass doch ein wenig zu langsam ist. Gibt's da vielleicht noch ne Komfortablere lösung, oder muss ich dass so über Stringzerlegung machen?

Warum ist das zuviel? Du nutzt beim .NET Framework doch auch nicht alle Funktionen aus und ist die Speicherbelastung so groß? Ich mein warum das Rad als neu erfinden? Du kannst dir deine Engine doch so aufbauen, das du all die von dir gebrauchten Funktionen kapselst und es übersichtlicher aufbaust. Fängst du da nicht zu groß mit an gleich mit Skriptsprache anzufangen? Mach erstmal die ersten Schritte du wirst feststellen das sie schon kompliziert genug sind *g* Über eine Skriptsprache kannst du später immer noch genug Gedanken machen.
 
Nagut, ich gebe zu du hast recht. Allerdings ist das in dem Fall auch ein wenig anders, als bei den meisten Engines, diese ist nämlich ein Teil meines Programms. Ich werde mir also erstmal ein paar Klassen für die Entsprechende Kapselung schreiben, und dann kümmere ich mich um die Scriptsprache. Das ist notwendig, weil über diese alles läuft, selbst das laden der Daten.
 
Achso wenn das so ist, dann würde ich dir zu SDL.NET raten, da du dem User sonst zwei Frameworks zumuten müsstest und du weißt ja wie skeptisch sie gegenüber Microsoftsachen sind *g*
 
Zurück