 |
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
alexm Mini JLI'ler

Anmeldedatum: 20.11.2005 Beiträge: 15 Wohnort: Wien Medaillen: Keine
|
Verfasst am: 24.11.2005, 09:33 Titel: Buchkritik zu "jetzt lerne ich DirectX9 und Visual C++& |
|
|
Da ich mich mit dem Thema DX & C++ für Spieleentwicklung auseinandersetzen wollte, habe ich mich riesig gefreut, als ich dieses Buch entdeckte.
Bis zur Seite 140 war alles nachvollziehbar und auch gut erklärt.
Auf Seite 141 wird dann jedoch das erste mal für Verwirrung gesorgt.
Beispiel:
Bis dahin, wird der * jeweils vor die Zeigervariable gestellt. Ab Seite 141 wird gemischt:
Seite 141:
CPP: | int* pZahl = new int; |
Seite 142:
Nach Stundenlangem suchen rief ich einen Freund an, der mir erklärte, dass das vollkommen egal ist, wo der Stern steht.
Sorry, aber da C++ einen sehr komplexen Eindruck macht, geht man davon nicht aus, dass soetwas egal ist.
Hier wäre eine kurze Dokumentation angebracht gewesen, warum ab hier (geht ja später im Buch genauso gemischt weiter) der Stern einmal so und einmal so verwendet wird.
Die nächste Sache die mich Stundenlang beschäftigt hat, ist das Kapitel 12.5 / 12.6 (Seite 192, 193).
Geht man so vor, wie in dem Buch beschrieben, also
"Win32-Anwendung"
"Leeres Projekt"
"Fertigstellen"
danach Ordner Quellcodedateien -> Neue Datei HelloWindows.cpp
so erhält man eben eine leere Datei und nicht wie im Buch beschrieben, eine Datei mit der WinMain() die anders als bei der Konsolenanwendung aussieht.
Ab dieser Seite sind die Beispiele für mich leider gar nicht mehr nachvollziehbar. Einzige Chance um zu sehen, was die Beispiele im Buch bewirken ist, wenn man die Beispieldateien auf der CD ansieht und mit dem Buch vergleicht.
Leider kommt man aber auch hier nicht unbedingt auf einen grünen Zweig, da im Buch sehr viel gar nicht angeführt wird.
So fehlen zb. includes, die dann jedoch im zugehörigen Beispiel auf der CD sehr wohl vorhanden sind.
Mit 25.70 EUR ist das Buch ja zum Glück in einem vernünftigen Preissegment unterwegs, aber ich finds dennoch schade, dass hier so Oberflächlich gearbeitet wurde.
Ich bin momentan ratlos, wie ich mit meinem "C++ und DX lernen" mithilfe dieses Buches weiterkommen soll. |
|
Nach oben |
|
 |
AFE-GmdG JLI MVP


Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 24.11.2005, 10:59 Titel: |
|
|
Zu deinem ersten Problem / zu deiner erste Frage:
Es ist tatsächlich Egal, ob der Stern nach dem Typ oder vor der Variable zu finden ist.
Vom Logischem her finde ich aber, dass der Stern an den Typ gehört und nicht an die Variable, da:
oder um später eventuell besser arbeiten zu können
eine Variable vom Typ "Pointer auf Int" erstellt und nicht "Int, aber ein Pointer"
Da man den Stern später zum dereferenzieren benötigt, hat der Stern an der Variable noch diese Bedeutung. Bsp:
In pa steht nun eine Speicheradresse, welche von new zurückgegeben wurde, Beispielsweise 0x1bff0240, und an dieser Speicheradresse befinden sich 4 Bytes (sizeof(int) ist 4) welche den Wert 42 enthalten.
Da du nun den Speicher mit new zugewiesen hast, darfst du nicht vergessen, ihn wieder freizugeben, sonst entstehen die gefürchteten Memoryleaks - Speicherlöcher. Das bedeutet im Prinzip nur, dass du auf mit new zugewiesenen Speicher nicht mehr rankommst, solltest du seine Adresse vergessen (z.B. in dem du pa einen neuen Wert zuweist:
CPP: | //Schlechte Idee:
pa=0x12345678; | Nun kennst du den Orginalpointer nicht mehr und kannst diesen Speicherbereich weder freigeben noch erneut mit new bekommen...
Freigeben geschieht mit delete, in diesem Fall also
HTH, AFE-GmdG _________________
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 |
|
 |
fast hawk Senior JLI'ler

Anmeldedatum: 15.07.2005 Beiträge: 237 Wohnort: Freiburg Medaillen: Keine
|
Verfasst am: 24.11.2005, 14:02 Titel: |
|
|
Das mit dem Sternchen ist wirklich ein bisschen verwirend für anfänger
aber so weit ich weiß steht im Text das es egal ist das wo Sternchen steht. |
|
Nach oben |
|
 |
Dr. Best Senior JLI'ler

Alter: 35 Anmeldedatum: 17.06.2004 Beiträge: 269 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 24.11.2005, 14:49 Titel: |
|
|
Das beides möglich ist hat aber auch seinen Grund.
AFE-GmdG hat ja schon gesagt, dass es eigentlich logischer ist das Sternchen an den Typ zu schreiben. Daher kann man das auch machen.
Aber wenn man mehrere Variablen gleichzeitig deklariert dann sollte man die Sternchen besser an die Variablen schreiben:
Bei dieser Deklaration wären a und c Pointer auf int-Variablen, b wäre aber einfach eine int-Variable und kein Pointer.
Daher ist es in diesem Fall sinnvoller die Sternchen an die Variablen zu setzen.
Aus diesem Grund ist in C++ beides möglich. _________________
Ich bin da, wer noch? |
|
Nach oben |
|
 |
AFE-GmdG JLI MVP


Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 24.11.2005, 16:55 Titel: |
|
|
Der Code
ist aber auch extrem schlechter Programmierstil - und ich bin mir nichtmal sicher, ob b in diesem Fall wirklich nur ein int ist... (will ich auch nicht unbedingt Nachtesten - wie gesagt, extrem schlechter Stil)
ist ebenfalls schlechter Stil, weil auch hier nicht genau gesagt werden kann, was b und c ist. (Pointer oder nicht Pointer - das ist hier die Frage)
Um weiter zu gehen, wie sieht es dann folgendermassen aus:
CPP: | typedef int* PINT;
PINT a, b, c; |
Allein schon aus diesen Gründen habe ich bisher immer jede Variable extra Deklariert - nur dann gibt es keine "Interpretationsmöglichkeiten":
CPP: | int* a;
int b;
int* c; |
_________________
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 |
|
 |
Dr. Best Senior JLI'ler

Alter: 35 Anmeldedatum: 17.06.2004 Beiträge: 269 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 24.11.2005, 17:20 Titel: |
|
|
Also dass bei diesem Code b kein Pointer ist weiß ich mit Sicherheit.
Zumindest bei VC++ 6.0 und .net 2003 ist das der Fall.
Bei dem typedef wären glaube ich alle Variablen Pointer.
Aber hast schon Recht so ganz eindeutig ist die Sache nicht. Ich wollte es bloß mal erwähnt haben, da es erklärt weshalb beides möglich ist. _________________
Ich bin da, wer noch? |
|
Nach oben |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 24.11.2005, 19:16 Titel: |
|
|
ja, ich fands auch erst bisschen schweirig mcih in Windows einzuarbeiten, aber wenn du es mit dem Buch geschafft hast, hast du wirklich was gelernt, den selbsterarbeitetes vergisst man nciht so schnell wie beigebrachtes. Ich will damit nciht sagen das das so gut ist, sondern das es mit ein wenig Zeit durchaus möglich ist, alles zu verstehen. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
 |
alexm Mini JLI'ler

Anmeldedatum: 20.11.2005 Beiträge: 15 Wohnort: Wien Medaillen: Keine
|
Verfasst am: 24.11.2005, 22:36 Titel: |
|
|
Es freut mich, dass auf mein Posting ausschliesslich ernsthafte Antworten kommen. Hatte eigentlich vermutet, dass ich in der Luft zerissen werde.
zu dem Thema *
CPP: | int* a;
int b;
int* c;
|
finde ich als eindeutige und sauberste Schreibweise und würde es auch in Actionscript so machen.
@fast hawk:
dass ich das überlesen hätte? hmm ... glaub ich aber fast nicht.
@Jonathan_Klein:
Das ist ja genau das was mich so ärgert.
Die Thematik des Buches ist ja echt super und eben genau das, was man sich für den Anfang wünscht.
Allerdings frage ich mich, wie ich je in dem Buch weiterkommen soll da ich einfach die art und weise nicht durchblicke, wie der Autor denkt, dass man die Beispiele verstehen soll ( könnts mir folgen was ich meine? ).
Habe heute zb. zum xten mal das Beispiel angesehen, wie man ein Window erstellt.
Jetzt allmählich hats glaub ich ein bissl gefunkt.
Anders als bisher im Buch werden hier vorab diverse Parameter erklärt und ganz zum Schluss folgt dann das eigentliche Beispiel, dass funktionieren sollte wenn manns abtippt.
Habs noch nicht probiert, werde das aber sicher demnächst mal machen und euch Berichten. |
|
Nach oben |
|
 |
Christian Rousselle Site Admin

Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 24.11.2005, 23:46 Titel: |
|
|
Es kann durchaus sein, dass die Art und Weise, mit der ich im Buch versuche C++/Windows/DirectX zu erläutern nicht zu deiner Art zu lernen/verstehen passt. Das mag zwar für dich unangenehm sein, da du das Buch mit bestimmten Erwartenungen gekauft hast, auf der anderen Seite muss ich aber auch sagen, dass es schon mehr als erstaulich wäre, wenn du Themengebietete wie Windows an einem Nachmittag oder in einer Woche verstehst. Dazu sind die Themen auch zu komplex. Versuche es doch mal mit etwas mehr Geduld.
Christian |
|
Nach oben |
|
 |
fast hawk Senior JLI'ler

Anmeldedatum: 15.07.2005 Beiträge: 237 Wohnort: Freiburg Medaillen: Keine
|
Verfasst am: 25.11.2005, 13:21 Titel: |
|
|
Wie willst du es denn anders alexm erst den Quellcode und dann die Erklärung. Das ist die andere weiße die auch oft in Büchern ist.
Aber Windows ist so komplex das du da schon einen Monat einrechnen kannst(nur Grundlagen). Oft hilft es auch wenn du jeden Tag dir das einmal durchliest und dann mal darüber schläfst und am nächsten Tag nochmal liest dann kommt dir das oft viel Verständlicher vor. Vor allem nicht einfach über mache sachen nur so drüber lesen sonder Versuchen selber den Qellcode nachvollzeihen und ein bisschen damit spielen oder dir anschaust was passiert wenn du einen Wert veränderst einfach ein bisschen mit dem Code beschäftigen.Dann wird das mit der Zeit schon verständlich. |
|
Nach oben |
|
 |
GreveN JLI Master

Alter: 38 Anmeldedatum: 08.01.2004 Beiträge: 901 Wohnort: Sachsen - Dresden Medaillen: Keine
|
Verfasst am: 25.11.2005, 13:48 Titel: |
|
|
Lol? Ein einziges Buch, dass C++, STL, WinAPI, DirectX in ihrer vollen Gänze abhandeln soll? Dir ist bewusst, dass jedes dieser Themen für sich gut und gerne 1-2 Bücher füllen kann?
Ich kann dir nur empfehlen dir weiteres Referenzmaterial zu den einzelnen Sachen zu besorgen, in deinem Falle am besten den Petzold. |
|
Nach oben |
|
 |
sp3cK-r0LL3 Senior JLI'ler

Alter: 34 Anmeldedatum: 18.06.2004 Beiträge: 275
Medaillen: Keine
|
Verfasst am: 25.11.2005, 22:53 Titel: |
|
|
greven er soll einfach anfangen zu coden, learning by doing ist besser als stures bücherlesen xD kann ich aus iegener erfahrung sagen wenn er dann soweit ost soll er sich neue bücher holen, aber er weiß ja nicht mal, ob ihm proggen spaß macht (wird). _________________ sex is updatedb; locate; talk; date; cd; strip; look; touch; finger; unzip; uptime; gawk; head; apt-get install condom; mount; fsck; gasp; more; yes; more; umount; apt-get remove --purge condom; make clean; sleep |
|
Nach oben |
|
 |
Patrick Dark JLI Master

Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 25.11.2005, 23:12 Titel: |
|
|
sp3cK-r0LL3
Na ja, aber für sowas Komplexes und Umfangreiches wie Win32API sollte man sich schon den Petzold zur Seite ziehen. Mit Learning By Doing ohne grundlegende Kenntnisse zerballert man sich damit schnell etwas. _________________ 'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ] |
|
Nach oben |
|
 |
fast hawk Senior JLI'ler

Anmeldedatum: 15.07.2005 Beiträge: 237 Wohnort: Freiburg Medaillen: Keine
|
Verfasst am: 25.11.2005, 23:17 Titel: |
|
|
Learning by doing ist auch meiner meinung nach bei programmieren nicht unbedingt angebracht.
Weil vieles einfach Know-how ist.(Schreib mir mal ein Spiel in DirectX wenn du keinerlei Material hast und DX noch nie gesehen hast).
Aber mit dem Code dann zu arbeiten ist ganz wichtig. Man kann sich was viel leichter merken wenn man mal ein bisschen
rumproggt wie wenn man es nur im Buch liest. |
|
Nach oben |
|
 |
sp3cK-r0LL3 Senior JLI'ler

Alter: 34 Anmeldedatum: 18.06.2004 Beiträge: 275
Medaillen: Keine
|
Verfasst am: 25.11.2005, 23:19 Titel: |
|
|
dann soll er erstmal was für konsole proggen, dann kann er an windows ran... mach halt n prog, dass dir pi ausrechnet.. nur so aus spaß: dann bekommste n bisschen gefühl für container etc., typecasten, std::cout/cin/etc. und algorithmen... _________________ sex is updatedb; locate; talk; date; cd; strip; look; touch; finger; unzip; uptime; gawk; head; apt-get install condom; mount; fsck; gasp; more; yes; more; umount; apt-get remove --purge condom; make clean; sleep |
|
Nach oben |
|
 |
|
|
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
|