000
19.02.2005, 19:24
GcDesign
|
Hi all!
Also - natürlich sind schon alle genervt wegen den Noobfragen und den lächerlichen Vorstellungen des moddens.
Trotzdem will auch ich es probieren - ich bin zwar kein Noob in Sachen programmieren und scripten (mache ich seit ca. 3 Jahren), aber habe keine nennenswerte Erfahrung mit C++.
Bis jetzt konnt ich mit dem Source SDK (MP) Sachen hinzaubern wie veränderte Startwaffen für die Teams, andere Chat-farben oder veränderte Schussfrequenzen (etc.)
Nun ist meine Frage ob es sinnvolle Ansätze von diesem Standpunkt aus an HL2 Modding gibt. Ich hab zwar bereits ein C++ Tutorial - das setzt aber mehr oder weniger C Wissen vorraus - und dieses hab ich ja nicht - ich bräcuhte zumindestens einen guten Überblick über Klassen und das allgemeine "System" von C++, weil ich mich beim Lesen des Codes immer wieder Frage "wieso wurde auf das Object mit -> und nicht mit . zugegriffen?" usw. Ich bin wissenbegierig und hab Scripten ja immerhin mit ~11 Jahren mir selbst nur mit Tutorials gelernt :)
Also - alle Links, Tipps, Tutorials und Vorschläge erwünscht! (Solange nicht ein "Vergiss es" oder ähnliches kommt...)
THX!
--
|
|
Profil || Suche
|
001
19.02.2005, 20:15
HammerBlade
|
Du willst also sozusagen mit HL2-Coding C++ lernen...
Dann lass dir gleich gesagt sein, dass du mit Coding-Tutorials zum Thema HL2-Modding nicht wirklich was lernen wirst. Ich sag nur C&P-Coding...
Du bist also eher am grundlegenden Konzept von C++ interessiert bzw. einer objektorientierten Sprache (OOP). Dann geh ich mal davon aus, dass du dich bis jetzt noch nicht so sehr mit OOP beschäftigt hast.
Ich empfehle dir hierfür das Buch "Die C++-Programmiersprache" von Bjarne Stroustrup, dem Erfinder von C++. Nähere Informationen zu Bjarne Stroustrup und viele nützliche Links/Tutorials/FAQ's zum Thema C++ findest du auf seiner Homepage: http://www.research.att.com/~bs/C++.html
--
"Mit C++ (noch besser mit C) kann man sich _sehr_ leicht in den Fuss schiessen." - theDon Auspack und freu! - Auszug aus einer, aus dem japanischen übersetzten, Bedienugsanleitung für ein Spielzeugaquarium. -- Photon Audio Player | Majestic42.net | How To Ask Questions The Smart Way
|
|
Profil || Suche
|
002
19.02.2005, 20:44
GcDesign
|
Jein - ich will auf jeden Fall noch das verstehen was mir im HL2 Code unklar erscheint - dabei bin ich mir nicht immer sicher ob es jetzt HL2 spezifisch ist oder allgemein.
Das OOP Konzept selbst hab ich ja denk ich verstanden - gut wäre dabei einfach nur ein Überblick über die Zugriffsmethoden in C++ - oder umgekehrt wenn soetwas auftaucht im HL2 Code zum verstehen.
--
|
|
Profil || Suche
|
003
19.02.2005, 21:03
HammerBlade
|
Der HL2-Code muss sich auch an den Standard halten...
Du meinst also den Unterscheide zwischen Pointer, Reference und Object...
Pointer: http://www.cplusplus.com/doc/tutorial/tut3-3.html References: http://www.parashift.com/c++-faq-lite/references.html
--
"Mit C++ (noch besser mit C) kann man sich _sehr_ leicht in den Fuss schiessen." - theDon Auspack und freu! - Auszug aus einer, aus dem japanischen übersetzten, Bedienugsanleitung für ein Spielzeugaquarium. -- Photon Audio Player | Majestic42.net | How To Ask Questions The Smart Way
|
|
Profil || Suche
|
004
19.02.2005, 21:45
GcDesign
|
Könntest du mir vl. nur ein wenig helfen? - Du scheinst ja Ahnung davon zu haben...
--
|
|
Profil || Suche
|
005
19.02.2005, 22:34
HammerBlade
|
Also mal ein einfaches Beispiel an Hand einer Klasse...
class CFoo { public: void Bar(); };
void test() { CFoo foo; CFoo* pFoo = new CFoo;
foo.Bar(); // Punktnotation pFoo->Bar(); // Pointernotation
(&foo)->Bar(); /* Referenzieren: durch Referenzoperator (&) wird foo (Object) jetzt als Pointer behandelt */
(*pFoo).Bar(); /* Dereferenzieren": durch Pointeroperator (*) wird pFoo (Pointer) jetzt als Object behandelt */ }
Parameterübergabe mit Pointer, Reference und Object...
int foo1(int a, int b) /* Object: copy-by-value - Änderungen an a und b sind lokal für diese Funktion */ { int n = a + b;
a += 5; b += 5;
return n; }
int foo2(int& a, int& b) /* Reference: copy-by-reference - Änderungen an a und b bestehen auch ausserhalb diese Funktion weiter*/ { int n = a + b;
a += 5; b += 5;
return n; }
int foo3(int* a, int* b) /* Pointer: copy-by-reference - Änderungen an a und b bestehen auch ausserhalb diese Funktion weiter*/ { int n = *a + *b; /* a und b müssen hier dereferenziert werden, um nicht mit den Speicheradressen zu rechnen */
*a += 5; *b += 5;
return n; }
void test() { int x1 = 5, y1 = 3; int x2 = 5, y2 = 3; int x3 = 5, y3 = 3; int n1 = foo1(x1, y1); // n3 = 8, x3 = 5, y3 = 3; int n2 = foo2(x2, y2); // n3 = 8, x3 = 10, y3 = 8; int n3 = foo2(&x3, &y3); // n3 = 8, x3 = 10, y3 = 8; - Referenzieren }
--
"Mit C++ (noch besser mit C) kann man sich _sehr_ leicht in den Fuss schiessen." - theDon Auspack und freu! - Auszug aus einer, aus dem japanischen übersetzten, Bedienugsanleitung für ein Spielzeugaquarium. -- Photon Audio Player | Majestic42.net | How To Ask Questions The Smart Way
Dieser Beitrag wurde am 19.02.2005 um 22:35 von HammerBlade bearbeitet.
|
|
Profil || Suche
|
006
19.02.2005, 23:01
GcDesign
|
Wow - thx! Echt toll - ich hab hier mal noch meine Fragen / Gedanken hinzukommentiert
class CFoo { public: void Bar(); //... Bar ist hier ein(-e)? };
void test() { CFoo foo; // Foo ist jetzt ein Objekt von der Klasse CFoo CFoo* pFoo = new CFoo; // Der Pointer pFoo zeigt auf ein neues Objekt von der Klasse CFoo //CFoo *pFoo = new CFoo; würde das gleiche bewirken ?
foo.Bar(); // Punktnotation -> Was genau würde jetzt genau gemacht? (void Bar(); ...) pFoo->Bar(); // Pointernotation -> -||-
(&foo)->Bar(); /* Referenzieren: durch Referenzoperator (&) wird foo (Object) jetzt als Pointer behandelt */
(*pFoo).Bar(); /* Dereferenzieren": durch Pointeroperator (*) wird pFoo (Pointer) jetzt als Object behandelt */ }
Achja - und es wäre ich super wenn ich dich öfters was fragen könnte falls was is - also allgemein
Ok, thx nochmal, cu
--
|
|
Profil || Suche
|
007
19.02.2005, 23:20
HammerBlade
|
Also...
class CFoo { public: void Bar(); // Eine Funktion };
void test() { CFoo foo; // Foo ist jetzt ein Objekt von der Klasse CFoo -> Ja CFoo* pFoo = new CFoo; // Der Pointer pFoo zeigt auf ein neues Objekt von der Klasse CFoo -> Ja //CFoo *pFoo = new CFoo; würde das gleiche bewirken ? Ja
foo.Bar(); // Punktnotation -> Es wird dir Funkiton Bar der Klasse CFoo aufgerufen pFoo->Bar(); // Pointernotation -> -||-
(&foo)->Bar(); /* Referenzieren: durch Referenzoperator (&) wird foo (Object) jetzt als Pointer behandelt */
(*pFoo).Bar(); /* Dereferenzieren: durch Pointeroperator (*) wird pFoo (Pointer) jetzt als Object behandelt */ }
--
"Mit C++ (noch besser mit C) kann man sich _sehr_ leicht in den Fuss schiessen." - theDon Auspack und freu! - Auszug aus einer, aus dem japanischen übersetzten, Bedienugsanleitung für ein Spielzeugaquarium. -- Photon Audio Player | Majestic42.net | How To Ask Questions The Smart Way
|
|
Profil || Suche
|
008
20.02.2005, 11:51
GcDesign
|
Ok - also soweit hab ich das alles denk ich verstanden Ich hoffe also dass ich jetzt weiterkomm :) Mal sehen ob noch Probleme auftreten mit den Funktionen (z.B. hatte ich mich auch gefragt wieso einmal ein Sound so abgespielt wurde - dann einmal so | oder wie jetzt die Variable verfügbar gemacht wurde [über den Header, oder eine "Punktnotation"] et.c)
Also, danke nochmal - und ich werd jetzt sehn ob ich soetwas zusammenbring wie eine neue Spieler-Variable zu implentieren (Geld oder Efahrung oder ähnliches) Mal sehen wo ich sowas finden kann ;)
--
|
|
Profil || Suche
|
009
22.02.2005, 23:10
Kriz
|
Um die Sache mal etwas zu vereinheitlichen: Klassenfunktionen in C++ schimpfen sich im allgemeinen als Methoden, Variablen als Elemente. Was HammerBlade dir hier gezeigt hat, ist aber nur die Spitze vom C++-Eisberg...
hf
--
K:R-I)Z++ "CSS ist cascading style sheets. Und nicht so'n Ranzspiel." - dp In memory of Voice ( 2005/03/30)
|
|
Profil || Suche
|
010
24.02.2005, 19:00
GcDesign
|
Ok... thx ;) Aber es wäre überhaupt am besten wenn mir jemand anhand eines 0815 HL Files das zeigen könnte... Aber die Zeit hat ja keiner... *schade* *lol*
Trotzdem thx nochmal für das Comment!
--
|
|
Profil || Suche
|