Objekte für eine bestimmte Zeit auftauchen und verschwinden lassen

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
  • Da es mal in einem Thread angefragt wurde,
    dachte ich, ich poste es gleich hier.
    Es geht darum, bestimmte Objekte in einer bestimmten Zeit immer wieder auftauchen und verschwinden zu lassen.
    Dies ist an sich ganz simpel, ich hatte die Idee, das man dies mit 2 Timern anstellen kann, die das Objekt abwechselnd auftauchen und verschwinden lassen.
    Nebenbei erkläre ich direkt, wie der Timer in Pawn funktioniert^^
    Ich weiß, das Tutorial ist nichts schwieriges bei und nichts besondderes, aber immerhin ist es auch mein erstes Tut hier :D


    Als erstes müssen wir ein Objekt das wir Auftauchen lassen und verschwinden lassen wollen erstellen.
    dies fügt ihr dann unter der public public OnGameModeInit() ein.
    Da wir mit dem Objekt nun etwas anstellen wollen, müssen wir es quasi definieren.
    dazu schreiben wir oben zu den new Sachen unser Objekt dazu. Ich mache diese Tut jetzt nur mit 1 Objekt das ich Objakt1 nenne.


    wir schreiben also oben:

    new Objekt1;


    und unter OnGameModeInit() unser Objekt, dem wir der gerade erstellter Variable zuweisen:
    Objekt1 = CreateObject(2942, 1154.7724609375, -1456.0705566406, 15.439774513245, 0, 0, 270);
    In meinem Fall ist die ein ATM am Kaufhaus in LS.


    Nun brauchen wir einen Timer, mitdem wir dann die Zeit angeben, wielange das Objekt das erste mal bleibt.
    Diesen Timer geben wir ebenfalls zu OnGameModeInit() dazu, z.B. unter unserm erstelltem Objekt:
    SetTimer("Objektweg",2000, false);


    SetTimer erstellt nun den Timer, das "Objektweg" sagt an, zu welcher public unser Timer führen wird, die Public erstellen wir gleich noch.
    Die 2000 gibt an, wieviele Millisecunden es dauern soll, bis der Timer zu der Public "Objektweg" gehen soll. Also wielange das Objekt das erste mal da sein soll. Wir nehmen mal 2000 = 2 sec. um das einfach mal zu verdäutlichen.
    das false gibt an, ob sich der Timer wiederhohlen soll, oder nicht, false bedeutet nein, true ja. Wir nehmen false, da wir diesen Timer nur einmal benutzen und dannach zwischen 2 anderen Timern wechseln.


    Nun haben wir schonmal alles, was wir im GameModInit() brauchen.
    Das sieht dann in etwas so aus:

    new Objekt1;
    public OnGameModeInit()
    {
    objekt1 = CreateObject(2942, 1154.7724609375, -1456.0705566406, 15.439774513245, 0, 0, 270); // ATM LS am NOOBSPAWN
    SetTimer("Objektweg",2000, false);
    }

    Zusätzlich steht da unter OnGameModeInit() natürlich auch noch das, was ihr da braucht, wie z.B.
    SetGameModeText("GameModText");
    AddPlayerClass(...................);


    nun erstellen wir 2 publics, mit je einen Timer, die immer untereinander wechseln:
    Da wir 2 publics erstellen, müssen wir die oben mit forwards "kennzeichnen".
    wir nennen die Public, die das Objekt löschen soll Objektweg und die public, die das Objekt wieder auftauchen lassen soll Objectda.
    Oben schreiben wir bei den forwards:

    forward Objektda();
    forward Objektweg();


    Da wir das Objekt schon erstellt haben, müssen wir es erstmal wieder löschen, bevor es wieder auftauchen kann.
    Dazu erstellen wir nun irgendwo die public Objektweg().
    dies sieht dann so aus:

    public Objektweg()
    {


    }


    Da wir oben schon den Timer haben, der zu der public führt und das Objekt schon da ist,
    wollen wir es erstmal verschwinden lassen, dazu schreiben wir in die public objektweg(), das das Objekt Objekt1 gelöscht werden soll.


    dazu schreiben wir in der public das:
    DestroyObject(objekt1);
    DestroyObject zerstört ein Objekt und in Klammern steht dann die ID des Objekts, das wir zerstören wollen.


    Nun ist das Objekt weg, es soll aber nach einer bestimmten Zeit natürlich wieder auftauchen und dazu erstellen wir einen Timer, der nachher zu unserer public Objektda() fürhrt, die das Objekt wieder auftauchen lässt:
    SetTimer("Objektda",2000, false);
    Da wir nach ende der Zeit zur public Objektda() wechseln, die ebenfalls einen Timer besitzt, der wieder hierher führt, soll sich der Timer nicht wiederhohlen, daher wieder ein true.
    Die Zeit ist jetzt auf 2 sec., ihr müsst sie dann anpassen, wie ihr wollt. 1000 Millisec. = 1 sec.


    Nun haben wir schonmal unsere public Objektweg, die unser Objekt löscht
    Dies sieht dann so aus:
    public Objektweg()
    {
    DestroyObject(objekt1);
    SetTimer("Objektda",2000, false);
    return 1;
    }


    Nun haben wir in der public Objektweg() einen Timer, der zur public Objektda() führt.
    Jetzt müssen wir die public Objektda() erstellen, die unser Objekt wieder auftauchen lässt.



    public Objektda()
    {


    }

    In dieser public wollen wir zuerst, da unser Objekt durch die public Objektweg zerstört wurde usner Objekt wieder erstellen.
    dazu nehmen wir wieder CreateObject:
    objekt1 = CreateObject(2942, 1154.7724609375, -1456.0705566406, 15.439774513245, 0, 0, 270);
    Wir kopieren einfach unser Objekt von oben herraus, das wir schonmal in OnGameModInit() erstellt ahben.


    Nun setzen wir wieder einen Timer, der zur public Objektweg führt und unser Objekt dann wieder zerstört.
    der sieht dann so aus:
    SetTimer("Objektweg",2000, false);
    Da ich überall 2000 Millisec. nehme, Blinkt das Objekt quasi, die Zeit müsst ihr dann so nehmen, wie ihr sie wollt.
    An dem blinken des Objekts kann man nur dann testhalber sehen, dass es geklappt hat, ohne lange warten zu müssen, bis das Objekt nach z.B. 10 Min da ist oder verschwindet ;)


    unsere public Objektda() sieht dann so aus:

    public Objektda()
    {
    objekt1 = CreateObject(2942, 1154.7724609375, -1456.0705566406, 15.439774513245, 0, 0, 270);
    SetTimer("Objektweg",2000, false);
    return 1;
    }

    Nun haben wir ein Objekt, das jede 2 Secunden auftaucht und nach 2 Secunden wieder verschwindet.
    Falls ihr mehrere Objekte machen wollt, setzt einfach weitere Objekte wie Objekt1 ein (einfach dann untereinander einfügen, z.B. dann Objekt2, Objekt3, etc.).
    Zeiten müsst ihr wie gesagt dann auch noch selber bestimmen, da 2 Secunden doch nervig ist, wenn das Objekt immer blinkt :D



    Unser Script sieht fertig dann so aus:


    oben im header des Scriptes:

    forward Objektda();
    forward Objektweg();


    new objekt1;

    weitere Objekte dann z.B. mit new Objekt2; einfügen.


    unter public OnGameModeInit():

    objekt1 = CreateObject(2942, 1154.7724609375, -1456.0705566406, 15.439774513245, 0, 0, 270); // ATM LS am NOOBSPAWN
    SetTimer("Objektweg",2000, false);


    und iwie in unserem Script im leeren unsere beiden publics:

    public Objektda()
    {
    objekt1 = CreateObject(2942, 1154.7724609375, -1456.0705566406, 15.439774513245, 0, 0, 270);
    SetTimer("Objektweg",2000, false);
    return 1;
    }


    public Objektweg()
    {
    DestroyObject(objekt1);
    SetTimer("Objektda",2000, false);
    return 1;
    }


    Und hier als Pastbin: Pastbin


    Hier ein Screen, wie das dann aussieht,
    Mit 2 sec. auftauchen und verschwinden. Das ist nur ein Beispiel und so für ein Game natürlich unbrauchbar, aber ihr könnt so z.B.
    Straßensperren oder Baustellen in einem bestimmtem Rythmus auftauchen und verschwinden lassen (natürlich dann länger als 2 sec. :D)


    Hoffe es hilft dem einen oder anderen weiter und bringt euch auf andere Ideen^^
    Die Sache hier ist wie gesagt nichts besonderes, aber so sehr leicht gerade für Anfänger zu verstehen und bringt die Funktion des Timers auch näher ;)
    Gruß,
    Dennis


    //EDIT: Rechtschreibfehler aus Überschrift entfernt
    //EDIT2: Bild (gif) hinzugefügt + Text über Bild
    //EDIT3: Pastbin hinzugefügt

    Wer Rechtschreibfehler findet, darf sie behalten ;)
    -> Forentechniker | WBB Entwickler pn

    3 Mal editiert, zuletzt von Dennis321 ()

  • ganz gut :thumbup:
    das hatte ich gesucht

    Zita aus dem Livestream chat von Internetlink von BigYoda ;)


    Zitat

    BigYoda: Ink sagt: "Ach OnGamemodeInit brauchen wir nicht löschen" Yoda: "Was ist das andere für ein Kram?". Ink: "Egal lösch einfach alles". Tutorial Ende :D





    DDG is Back


    Froum: DDG Forum
    Server IP: 85.25.20.59:7777
    Team Speak 3: 85.25.20.59