Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
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!

--

zum Seitenanfang zum Seitenende 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

zum Seitenanfang zum Seitenende 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.

--

zum Seitenanfang zum Seitenende 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

zum Seitenanfang zum Seitenende 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...

--

zum Seitenanfang zum Seitenende Profil || Suche
005
19.02.2005, 22:34
HammerBlade



Also mal ein einfaches Beispiel an Hand einer Klasse...

Quellcode: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...

Quellcode: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.
zum Seitenanfang zum Seitenende Profil || Suche
006
19.02.2005, 23:01
GcDesign



Wow - thx!
Echt toll - ich hab hier mal noch meine Fragen / Gedanken hinzukommentiert

Quellcode: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

--

zum Seitenanfang zum Seitenende Profil || Suche
007
19.02.2005, 23:20
HammerBlade



Also...

Quellcode: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

zum Seitenanfang zum Seitenende 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 ;)

--

zum Seitenanfang zum Seitenende 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)

zum Seitenanfang zum Seitenende 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!

--

zum Seitenanfang zum Seitenende Profil || Suche