![JLI Spieleprogrammierung Foren-Übersicht](templates/subSilver/images/jlilogo.jpg) |
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
OLiver Super JLI'ler
![](http://www.oliversseite.000k.net/jli_avatar.jpg)
Alter: 33 Anmeldedatum: 29.06.2003 Beiträge: 306 Wohnort: Jena Medaillen: Keine
|
Verfasst am: 20.07.2003, 08:38 Titel: DirektX Familie - kenn mich nicht aus |
|
|
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?
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 |
|
![](templates/subSilver/images/spacer.gif) |
Mr.X Junior JLI'ler
Anmeldedatum: 15.04.2003 Beiträge: 88
Medaillen: Keine
|
Verfasst am: 20.07.2003, 10:04 Titel: |
|
|
OLiver hat Folgendes geschrieben: | ...Ist es eine gute Idee für Anfänger mit denen zu arbeiten oder nicht? ... |
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 ^^
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.
mfG |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
OLiver Super JLI'ler
![](http://www.oliversseite.000k.net/jli_avatar.jpg)
Alter: 33 Anmeldedatum: 29.06.2003 Beiträge: 306 Wohnort: Jena Medaillen: Keine
|
Verfasst am: 20.07.2003, 10:17 Titel: |
|
|
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 |
|
![](templates/subSilver/images/spacer.gif) |
OLiver Super JLI'ler
![](http://www.oliversseite.000k.net/jli_avatar.jpg)
Alter: 33 Anmeldedatum: 29.06.2003 Beiträge: 306 Wohnort: Jena Medaillen: Keine
|
Verfasst am: 20.07.2003, 10:20 Titel: |
|
|
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 |
|
![](templates/subSilver/images/spacer.gif) |
AFE-GmdG JLI MVP
![JLI MVP JLI MVP](http://www.jliforum.de/images/mvp.gif)
![](http://jliforum.de/afe-gmdg/anthill.png)
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 20.07.2003, 10:41 Titel: |
|
|
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 |
|
![](templates/subSilver/images/spacer.gif) |
Mr.X Junior JLI'ler
Anmeldedatum: 15.04.2003 Beiträge: 88
Medaillen: Keine
|
Verfasst am: 20.07.2003, 10:57 Titel: |
|
|
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 |
|
![](templates/subSilver/images/spacer.gif) |
OLiver Super JLI'ler
![](http://www.oliversseite.000k.net/jli_avatar.jpg)
Alter: 33 Anmeldedatum: 29.06.2003 Beiträge: 306 Wohnort: Jena Medaillen: Keine
|
Verfasst am: 20.07.2003, 11:27 Titel: |
|
|
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. [/quote] _________________ http://www.sieder25.org/ (Siedler 2 - Remake) |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
Mr.X Junior JLI'ler
Anmeldedatum: 15.04.2003 Beiträge: 88
Medaillen: Keine
|
Verfasst am: 20.07.2003, 11:37 Titel: |
|
|
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](images/smiles/icon_wink.gif) |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
OLiver Super JLI'ler
![](http://www.oliversseite.000k.net/jli_avatar.jpg)
Alter: 33 Anmeldedatum: 29.06.2003 Beiträge: 306 Wohnort: Jena Medaillen: Keine
|
Verfasst am: 20.07.2003, 11:47 Titel: |
|
|
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 |
|
![](templates/subSilver/images/spacer.gif) |
Mr.X Junior JLI'ler
Anmeldedatum: 15.04.2003 Beiträge: 88
Medaillen: Keine
|
Verfasst am: 20.07.2003, 13:48 Titel: |
|
|
^^
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 |
|
![](templates/subSilver/images/spacer.gif) |
OLiver Super JLI'ler
![](http://www.oliversseite.000k.net/jli_avatar.jpg)
Alter: 33 Anmeldedatum: 29.06.2003 Beiträge: 306 Wohnort: Jena Medaillen: Keine
|
Verfasst am: 20.07.2003, 16:45 Titel: |
|
|
OK, danke, das wollt ich nur wissen... _________________ http://www.sieder25.org/ (Siedler 2 - Remake) |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
|
|
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
|