Hi, ich lern grad Spieleprogrammierung mit C++ und DirectX, hab ein paar interessante Beispiele, wo ich ein "Grundgerüst" genommen hab und nun versuche ein kleines 2D Spiel mit einer Map zu erstellen.
Angefangen hab ich mal so:
Allerdings liefert mir der Compiler (Visual Studio 2005) ständig den Fehler "Unerwartetes Dateiende gefunden und verweist auf Zeile 1. Klingt nach richtig argem Noobfehler, aber ich find einfach nichts.
Kann mit bitte jemand helfen?
So, ich hab jetzt ein paar geringfügige Änderungen vorgenommen, hab aber schon wieder nen Fehler. Ich möchte ein Teilrechteck blitten, aber bekomme diese Fehler:
Fehler 1 error C2664: 'CDisplay:reateSurfaceFromBitmap': Konvertierung des Parameters 1 von 'LPDIRECTDRAWSURFACE7 **' in 'CSurface **' nicht möglich cDokumente und Einstellungen\Florian\Eigene Dateien\Visual Studio 2005\Projects\LOL Maker\LOL Maker\Programm.cpp 173
Fehler 2 error C2664: 'HRESULT CDisplay:lt(DWORD,DWORD,LPDIRECTDRAWSURFACE7,RECT *,DWORD)': Konvertierung des Parameters 3 von 'LPDIRECTDRAWSURFACE7 *' in 'LPDIRECTDRAWSURFACE7' nicht möglich cDokumente und Einstellungen\Florian\Eigene Dateien\Visual Studio 2005\Projects\LOL Maker\LOL Maker\Programm.cpp 187
Naja, das wurde nur kurz in dem Buch, das ich les erwähnt, so ein Rechteck aus einem Surface zu nehmen, wie sollte ich da vorgehen? bzw. wäre es besser, ein Array mit den einzelnen Tiles zu erstellen, anstatt Teilrechtecke aus einem ganzen Tileset zu nehmen?
Das Problem beim zweiten müsste sein, dass du einen pointer auf ein Objekt übergibst, wo das Objekt verlangt wird. Wenn ich mich recht erinnere, musst du beim Funktionsaufruf vor dem pointer ein '*' zum dereferenzieren hinzufügen.
Wegen dem ersten Fehler:
Inwiefern hängen LPDIRECTDRAWSURFACE7 und 'CSurface zusammen? Vererbte klassen?
Und zeig da mal ein bisschen Code an der Stelle des Funktionsaufrufes und davor.
Weiß ich auch nicht. Wird in meiner Referenz nirgends erwähnt, naja, ich mach es jetzt eh anders, ich speichere die Tiles in einem CSurface-Array, sollte eh besser funktionieren, aber trotzdem danke für die Hilfe!
...
DXSDK 7... Wobei ich gar nicht erkennen kann, was daran DirectX ist. Z.B. seh ich für DirectX 7 kein DirectDrawCreateEx oder SetDisplayMode. LPDIRECTDRAWSURFACE7 ginge schon Richtung DirectX. Zudem müsstest du von LPDIRECTDRAWSURFACE7 keinen Pointer machen, das vorgestellte LP will darauf hinweisen, dass es ein Pointer ist.
and Btw. in DirectX hat man es normalerweise nicht nötig mit Tiles zu arbeiten. Ich würde sowieso auf das DXSDK 9 oder wenigstens 8 umsteigen, da ist alles ein bischen anders mit den Interfaces, aber das Prinzip ist das gleiche.
Tut mir leid, aber das kann ich dir einfach nicht glauben, seit DirectX 8 "gibt es directdraw nicht mehr"(es ist in Direct3D enthalten). Eine aktuelle Einbindung der Headerdateien sieht so aus:
bzw. mit 10 ersetzt, falls man schon mit DirectX 10 programmiert.
ok ich probier mal zu zeigen wie man DirectX initialisiert:
am Besten packt man dies in eine Klasse.
Naja, dabei ist DirectDraw eigentlich schon, es wird nur nicht mehr weiterentwickelt. Ich hab ein paar Beispiele, die DirectDraw verwenden kompiliert und die gingen mit dem neuesten SDK ohne Probleme.
Ich hab mich jetzt ein wenig umgehört und erfahren, dass Direct3D hardwarebeschleunigt ist und DirectDraw nicht, kann mir jemand vllt ein gutes Tutorial empfehlen, welches 2D Programmierung mit Direct3D erklärt, ich will nicht extra alles über 3D Programmierung lernen, um auch was in 2D zu erstellen, da mir das jetzt doch noch zu kompliziert ist.
Tut mir leid, aber das kann ich dir einfach nicht glauben, seit DirectX 8 "gibt es directdraw nicht mehr"(es ist in Direct3D enthalten). Eine aktuelle Einbindung der Headerdateien sieht so aus:
...
Also vom Hören-Sagen her hieß es mal, dass DirectDraw (bzw alle 2D Operationen) seit der 7er Version gleichgeblieben ist. Das heißt, bei DirectX8 und die folgenden wurden lediglich die 3D Teile ausgetauscht und verbessert. Demnach wird selbst beim 9er DirectX in Verwendung mit 2D Grafik noch die Bestandteile vom 7er verwendet, die sich seitdem nicht verändert haben. Entsprechend kann es gut sein, dass dort von Dx7 die Rede ist, auch wenn er Dx9 verwendet. Aber sicher bin ich mir bei all dem nicht.
Also vom Hören-Sagen her hieß es mal, dass DirectDraw (bzw alle 2D Operationen) seit der 7er Version gleichgeblieben ist. Das heißt, bei DirectX8 und die folgenden wurden lediglich die 3D Teile ausgetauscht und verbessert. Demnach wird selbst beim 9er DirectX in Verwendung mit 2D Grafik noch die Bestandteile vom 7er verwendet, die sich seitdem nicht verändert haben. Entsprechend kann es gut sein, dass dort von Dx7 die Rede ist, auch wenn er Dx9 verwendet. Aber sicher bin ich mir bei all dem nicht.
...
So ist es ich glaube, bei jedem DirectX SDK sind die Headerdateien von den älteren Versionen auch noch drin.