JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=30baa4c6ed1d3461cd054c2ff4be4ea0Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

DirektX Familie - kenn mich nicht aus

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
OLiver
Super JLI'ler


Alter: 33
Anmeldedatum: 29.06.2003
Beiträge: 306
Wohnort: Jena
Medaillen: Keine

BeitragVerfasst am: 20.07.2003, 09:38    Titel: DirektX Familie - kenn mich nicht aus Antworten mit Zitat

Hallo,

ich bin zu zeit noch am lernen mit 2D Spielen, wollt aber mal fragen, wie so die DirektX Familie funktioniert.
Ich arbeite zur Zeit mit den Klassen CDisplay, CSurface usw.
Diese sind in ddutil.h, ddutil.cpp, dsutil.h, dmutil.h...
definiert.

Ist es eine gute Idee für Anfänger mit denen zu arbeiten oder nicht? Question

Und dann noch ne Frage, kann mit mit dem CDisplay nur einen bestimmten Ausschnitt auf den Bildschrim bringen.
(z.B. bei Jump'n Run spielen)???
_________________
http://www.sieder25.org/ (Siedler 2 - Remake)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Mr.X
Junior JLI'ler



Anmeldedatum: 15.04.2003
Beiträge: 88

Medaillen: Keine

BeitragVerfasst am: 20.07.2003, 11:04    Titel: Antworten mit Zitat

OLiver hat Folgendes geschrieben:
...Ist es eine gute Idee für Anfänger mit denen zu arbeiten oder nicht? Question...


Für Anfänger auf jeden Fall, da man mit diesen Klassen mit 1 Codezeile DirectDraw intialisieren kann, und mit wenigen Weiteren bereits ein Bild aus einer Datei laden und auf dem Display anzeigen lassen kann. Und Anfänger sollten und wollen ja nunmal schnelle (wenn auch kleine) sichtbare Erfolge sehen.



OLiver hat Folgendes geschrieben:
...kann mit mit dem CDisplay nur einen bestimmten Ausschnitt auf den Bildschrim bringen...


Hier mal die Parameterliste der Funktion:
HRESULT CDisplay::Blt(DWORD x, DWORD y, CSurface* pSurface, RECT* prc);

Der vierte Parameter (RECT* prc) kann fehlen (da wird alles kopiert), da Du aber nun nur einen bestimmten Bereich auf den Bildschirm bringen willst, übergibst Du hier eine RECT-Struktur, die Du mit den Begrenzungen Deines Bereiches gefüllt hast.
Beispiel:
Code:

RECT bereich;
bereich.top = y_linksoben;
bereich.left = x_linksoben;
bereich.bottom = y_rechtsunten;
bereich.right = x_rechtsunten;

DeinCDisplay.Blt(...,...,...,&bereich);



Und nun das Übliche zum Schluss ^^ Wink
Es macht mehr Freude und eröffnet einem mehr Möglichkeiten, wenn man eigene Funktionen und Klassen zum Kapseln von DirectX (bzw. DD in Deinem Fall) schreibt, anstatt Vorgefertigte zu nutzen. Smile

mfG
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
OLiver
Super JLI'ler


Alter: 33
Anmeldedatum: 29.06.2003
Beiträge: 306
Wohnort: Jena
Medaillen: Keine

BeitragVerfasst am: 20.07.2003, 11:17    Titel: Antworten mit Zitat

Ich mein nicht nur ein stück von einem Bild (Surface), sonder einen bestimmten Ausschnitt vom Display.
Zum Beispiel wenn man jetzt einen großen Hintergrund hat, wo immer nur ein Teil angezeigt werden soll.

Und wenn man dann tiefer in die Materie einsteigen will, sollte man dann das kompliziertere zeug nehmen.

Oder sollte man das erst nehmen, wenn man 3D Spiele programmiert?
_________________
http://www.sieder25.org/ (Siedler 2 - Remake)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
OLiver
Super JLI'ler


Alter: 33
Anmeldedatum: 29.06.2003
Beiträge: 306
Wohnort: Jena
Medaillen: Keine

BeitragVerfasst am: 20.07.2003, 11:20    Titel: Antworten mit Zitat

Achso, kennst du ein gutes Buch, was sich außschlielich mit DirektX befasst? (vielleicht ein wenig WinAPI wär auch nicht schlecht)

Aber ich hab immer nur Bücher gesehen, die wieder bei Null anfagen (mit Variablen etc...)

Das wär Verschwendung...
_________________
http://www.sieder25.org/ (Siedler 2 - Remake)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
AFE-GmdG
JLI MVP
JLI MVP


Alter: 45
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 20.07.2003, 11:41    Titel: Antworten mit Zitat

Ist zwar kein Buch, aber die MSDN ist genau das, was du brauchst. Enthalten sind ja auch komplette Beispiele.
_________________
CPP:
float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;}
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Mr.X
Junior JLI'ler



Anmeldedatum: 15.04.2003
Beiträge: 88

Medaillen: Keine

BeitragVerfasst am: 20.07.2003, 11:57    Titel: Antworten mit Zitat

OLiver hat Folgendes geschrieben:
Ich mein nicht nur ein stück von einem Bild (Surface), sonder einen bestimmten Ausschnitt vom Display.
Zum Beispiel wenn man jetzt einen großen Hintergrund hat, wo immer nur ein Teil angezeigt werden soll....

Diesen Ausschnitt bestimmst Du doch durch die übergebe x- und y-Koordinate für das Display und die Größe des zu kopierenden Bereichs innerhalb der RECT-Structur!

Willst Du im Display bei den Koordinaten 200x100 ein 30x30 großes Stück immer nur aktualisieren, dann übergibst Du Deiner Blt-Funktion eben z.B.:
Code:
RECT bereich;
bereich.top = y_linksoben;
bereich.left = x_linksoben;
bereich.bottom = y_linksoben+30;
bereich.right = x_linksoben+30;

DeinCDisplay.Blt(200,100,...,&bereich);



OLiver hat Folgendes geschrieben:
...Und wenn man dann tiefer in die Materie einsteigen will, sollte man dann das kompliziertere zeug nehmen.
Oder sollte man das erst nehmen, wenn man 3D Spiele programmiert?

3D-Spiele haben damit nixs zu tun. Du kannst auch 2D-Spiele so kompliziert machen, wo es besser ist, Du steigst tiefer in die Materie ein, als nur vorgefertigte Klassen zu nehmen.

OLiver hat Folgendes geschrieben:
Achso, kennst du ein gutes Buch, was sich außschlielich mit DirektX befasst? (vielleicht ein wenig WinAPI wär auch nicht schlecht)...

Da Du DirectDraw nutzt, wäre wohl die erste Ausgabe von "JLI-Spielprogrammierung mit DirectX" (nicht die Aktuelle wegen DirectDraw) von Nutzen. Ist sehr einfach und verständlich für Anfänger. Allerdings fängt es auch bei Null an!!! Du kannst ja die ersten Kapitel überspringen.

Ein anderes Buch wäre vielleicht "Spieleprogrammierung in C++". Da gibts auch ein bisschen WinAPI mit dazu, wie Du ja wünschst. Und bei Null fängt es auch nicht an. Von diesem Buch kannst sogar gleich online ein komplettes Kapitel (Link Leseprobe) lesen, in welchem ein Tetris-Clone erstellt wird!!!

Du kannst aber genausogut auch im Internet suchen! Da findest Du haufenweise leicht verständliche DD-Einführungen, wenn es nicht unbedingt ein Buch sein muss. Hier mal einer von vielen Suchtreffern: "DD-Einführung"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
OLiver
Super JLI'ler


Alter: 33
Anmeldedatum: 29.06.2003
Beiträge: 306
Wohnort: Jena
Medaillen: Keine

BeitragVerfasst am: 20.07.2003, 12:27    Titel: Antworten mit Zitat

Nein, das RECT ist für das Surface gemeint.
Wenn du also nur ein Teil von einem Surface auf den Display blitten willst.

Übrigens ich hab das Buch (Spieleprogrammierung in C++), aber ich bräuchte noch so eine Art Nachschlagewerk.

Weil das Problem an projektorientierten Vorgehen ist immer, dass man dann zwar den Tetrisklon programmieren kann, wenn man dann aber was selber machen will (z.B. ein Spiel im Vollbildmodus), hat man Pech gehabt, weil man meistens nur die Funktionen kennt, die auch in dem Tetrisspiel vorhanden sind. Crying or Very sad [/quote]
_________________
http://www.sieder25.org/ (Siedler 2 - Remake)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Mr.X
Junior JLI'ler



Anmeldedatum: 15.04.2003
Beiträge: 88

Medaillen: Keine

BeitragVerfasst am: 20.07.2003, 12:37    Titel: Antworten mit Zitat

OLiver hat Folgendes geschrieben:
Nein, das RECT ist für das Surface gemeint.
Wenn du also nur ein Teil von einem Surface auf den Display blitten willst....

HMPF, das RECT gibt explizit den Bereich des Surfaces an, der kopiert werden soll, und implizit den Bereich des displays, auf den kopiert werden soll!!!


OLiver hat Folgendes geschrieben:
Weil das Problem an projektorientierten Vorgehen ist immer, dass man dann zwar den Tetrisklon programmieren kann, wenn man dann aber was selber machen will (z.B. ein Spiel im Vollbildmodus), hat man Pech gehabt, weil man meistens nur die Funktionen kennt, die auch in dem Tetrisspiel vorhanden sind.

Daher reicht es eben nicht, nur ein,zwei Bücher oder Artikel über ein Thema zu lesen, sondern viele, und abermals viele Artikel, Kapitel aus Büchern und dem Internet zu ein und demselben Themenschwerpunkt. Nur so lernst Du ausreichend und effizient! Und dann sind eigene Projekte kein Problem mehr, da man so alles in irgendeiner Form schonmal irgendwo gelesen hat und dementsprechend nachschauen kann, falls doch wieder Fragen auftreten sollten.


Und zum Thema Nachschlagewerk: Da hat AFE-GmdG weiter oben schon das Einzige und Beste gepostet!

Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
OLiver
Super JLI'ler


Alter: 33
Anmeldedatum: 29.06.2003
Beiträge: 306
Wohnort: Jena
Medaillen: Keine

BeitragVerfasst am: 20.07.2003, 12:47    Titel: Antworten mit Zitat

Ich weiß!

Aber du hast mich anscheinend falsch verstanden.
Ich will nur ein Stück von einem Display auf dem Bildschrim anzeigen!

Wenn ich einen Display habe, der 10000*10000 Pixel ist, kann ich ihn ja wohl schwer auf den Bildschrim abbilden, ich will also einen Teil des Displays auf dem Bildschirm abbilden.

Die Blt Funktion kopiert ein Surface (oder auch einen Teil) davon und hat damit nichts damit zutun, da ich ja nur ein Stück vom Display, nicht von einem Surface abbilden will!
_________________
http://www.sieder25.org/ (Siedler 2 - Remake)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Mr.X
Junior JLI'ler



Anmeldedatum: 15.04.2003
Beiträge: 88

Medaillen: Keine

BeitragVerfasst am: 20.07.2003, 14:48    Titel: Antworten mit Zitat

^^
So wie Du Dir das denkst geht das nicht!!!

Ich schätze mal, Du willst die Klasse CDisplay gleich als kompletten Levelhintergrund nutzen, auf den Du Deine Surfaces kopierst, und dann immer nur den Teil auf dem Bildschirm ausgeben, der gerade aktuell zu sehen sein soll. Und genau da ist Dein Denkfehler!
CDisplay stellt nicht eine beliebige Oberfläche dar, die Du dann anzeigen lassen kannst, sondern CDisplay IST die angezeigte Oberfläche
Du solltest also einen Extra-Suface erstellen, auf das Du Deinen Hintergrund kopierst! Von da kopierst Du dann immer nur den relevanten Teil in Dein Display und darauf dann Deine Sprite-Surfaces. Und dann lässt Du CDisplay aktuallisieren durch CDisplay::Present();
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
OLiver
Super JLI'ler


Alter: 33
Anmeldedatum: 29.06.2003
Beiträge: 306
Wohnort: Jena
Medaillen: Keine

BeitragVerfasst am: 20.07.2003, 17:45    Titel: Antworten mit Zitat

OK, danke, das wollt ich nur wissen...
_________________
http://www.sieder25.org/ (Siedler 2 - Remake)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum