Loops/Schleifen - Erklaerung

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Also hier erkläre ich mal kurz und knapp die "Loop's".


    Schleifen werden meistens gebraucht um mehreren Spielern eine Funktion "anzuhängen" die eigentlich
    nur für "playerid" (einem Spieler) gedacht ist!
    ____________________________________________________________________________
    Es gibt auch "while" schleifen nur diese kann ich im moment kaum.
    Kommt nocht :)

    ____________________________________________________________________________
    Ein Beispiel (for-loop):
    for(new i = 0; i<MAX_PLAYERS; i++)
    {
    if(!IsPlayerConnected(i)) continue;
    SendClientMessage(i, 0x0066CCFF, "Dies ist ein TEST-Text!"); //i Da die Message nicht an "playerid" sondern an jeden geschickt werden soll der "i" ist (Alle da wir MAX_PLAYERS als i definiert haben
    }
    /*Dies ist eine Alternative zu "SendClientMessageToAll"*/


    Erläuterung (for loop):


    /*Standart:*/
    for(new i = 0; i<MAX_PLAYERS; i++)//Um diese Zeile geht es


    /*Verändert:*/
    for(new i = 0; i<GetMaxPlayers(); i++)//Um diese Zeile geht es


    new i = 0; - Definiert die Variable "i" und wird auf "0" gesetzt.
    i<MAX_PLAYERS; - Fragt ob "i" kleiner ("<") als "MAX_PLAYERS" ist.


    i++ - "i" wird + 1 Addiert ("++").
    continue - Lässt eine Schleife weiter arbeiten.
    break - Lässt die Schleife eine Pause machen(!!VERMUTE ICH!!)

    ____________________________________________________________________________
    Eine Andere Version für die for-schleife?
    Kein Ding diese ist Recourceschonender und viel schneller.

    new i = 0;
    for(;i < GetMaxPlayers(); i++) {
    }
    ____________________________________________________________________________
    Ein Beispiel womit man die auch benutzen kann diese Schleifen:
    (Selfmade)

    stock RespawnAllCars() { for(new veh = 0; veh < MAX_VEHICLES; veh++) SetVehicleToRespawn(veh); return 1; }
    /*Mit dieser Funktion kann man alle Autos Respawnen
    Anwendung:


    -Im CMD einfach "RespawnAllCars();" einfügen und den CMD ingame eingeben und SCHWUPS alle Cars wieder da!
    Diese Funktion Respawned alle Cars die im Script definiert sind und die die per /veh gespawned wurden!*/


    ____________________________________________________________________________



    WHILE-LOOPS


    "while"- zu Deutsch "whärend"-Schleifen/Loops.


    new
    i = 0;//Wir definieren "i" und setzen "i" auf "0"
    while (i < 10)//whärend i kleiner als ("<") 10 ist
    {
    i++; //Wird "i" + 1 Addiert
    /*Was im Loop passieren soll*/
    }
    /*Nach dem Loop*/
    Besser kann ich das noch nicht X(


    ____________________________________________________________________________
    Comming Soon?



    While-Loop's Vollständige erklärung


    Break + Continue erklärung


    Bisschen mehr ?



    GreetZ

    Zitat

    Joda21:47
    Joda = mein spritzname
    xD


    Ice21:47
    zeig mir dein lichtschwert !


    Joda21:47 spitzname* xDD

    Ich bin ein Vogel (Joda)


    12 Mal editiert, zuletzt von Johann_x3 ()

  • Es fehlen noch die ,,while´´ schleifen die eine Schleife + Abfrage darstellen in den Kategorieren , garantiertes ausführen beim ersten mal & permanentes Ausführen solange die Anweisung stimmt.

    Mfg. BlackFoX_UD_ alias [BFX]Explosion


  • Ich wollte heute noch hinzugfügen, dass es While schleifen gibt nur die kann ich eigentlich garnicht. :pinch:


    Und in Wiki (EN + GER) gibt es kein einziges Tut oÄ für "While-Loops".

    GreetZ

    Zitat

    Joda21:47
    Joda = mein spritzname
    xD


    Ice21:47
    zeig mir dein lichtschwert !


    Joda21:47 spitzname* xDD

    Ich bin ein Vogel (Joda)


    Einmal editiert, zuletzt von Johann_x3 ()

  • Du solltest noch continue und break erklären und noch die do {} while()-Methode.
    Ansonsten ganz okay. 7/10P


    Ich scripte NICHT mehr, ich möchte mit NIEMANDEM einen Server aufmachen habe auch NICHTS mehr mit LoH zu tun, also lasst es mit den PNs!

  • Ich kann leider nur for, continue weiss ich auch mehr nicht X(

    GreetZ

    Zitat

    Joda21:47
    Joda = mein spritzname
    xD


    Ice21:47
    zeig mir dein lichtschwert !


    Joda21:47 spitzname* xDD

    Ich bin ein Vogel (Joda)


  • Warum eine Schleife 500 mal durchlaufen lassen obwohl man zB. nur 100 Spielerslots hat ?


    for(new i = 0; i<MAX_PLAYERS; i++) 
    Lieber zu
    for(new i = 0; i<GetMaxPlayers(); i++) GetMaxPlayers() gibt die Slotanzahl zurück also in diesen Fall 100. So wird es nicht 400 Mal unnötig verschickt.

  • *Changelog:


    Added:


    - Neue Varianten und Recourceschonendere!
    - While drin

    GreetZ

    Zitat

    Joda21:47
    Joda = mein spritzname
    xD


    Ice21:47
    zeig mir dein lichtschwert !


    Joda21:47 spitzname* xDD

    Ich bin ein Vogel (Joda)


  • Du hast dir den Link von mir sicherlich nicht angeschaut,sonst würdest du jetzt hier bestimmt nix von "Resourcen schonend" schreiben.


    i<MAX_PLAYERS; - Fragt ob "i" kleiner ("<") als "MAX_PLAYERS" ist. (Nicht Recourseschonend, deshalb:
    i<GetMaxPlayers() - Ist das selbe wie drüber mit MAX_PLAYER nur Recourceschonender!
    Das stimmt definitiv nicht.

  • Ja bei dir im Thread steht das man MAX_PLAYER definiert und so genau genommen gerade dann schneller und besser arbeitet

    GreetZ

    Zitat

    Joda21:47
    Joda = mein spritzname
    xD


    Ice21:47
    zeig mir dein lichtschwert !


    Joda21:47 spitzname* xDD

    Ich bin ein Vogel (Joda)


  • for(new i = 0;i<MAX_PLAYERS;i++){
    if(!IsPlayerConnected(i) || IsPlayerNPC(i))continue;
    }


    schont Ressourcen & überspringt gewissen Plätze.
    zum anderen ist GetMaxPlayers(); ein weiterer indirekter Zugriff sprich
    es muss erst ein Zugriff erfolgen der dauert länger als die Direkte Rückgabe des Werts 500( Spieler )


    Des weiteren hängt es davon ab welche Umstände der Code bietet um bestimmte Methoden zu kombinieren & zu verwenden.

    Mfg. BlackFoX_UD_ alias [BFX]Explosion


  • While Schleifen



    Was ist eine While Schleife ?
    Eine While Schleife ist sowas wie eine If abfrage doch diese beendet sich erst nur dann wenn das gefragte das gegenteil davon ist.


    Beispiel:

    new count;
    while(count < 50)
    {
    count++;
    }


    Diese While schleife wird sich dann beenden wenn die Variable count über oder gleich 50 ist.


    ____________________________________________________________________________________________________________________________________________________



    Tutorial : 5/10



    LG ^^