Zeichenkette Schritt für Schritt erscheinen 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
  • Hallo,


    Ich hab mich gefragt, ob es möglich ist, möglichst CPU-freundlich, eine Zeichenkette Buchstabe für Buchstabe in einem Textdraw abtippen zu lassen.


    Beispiel:
    Ich möchte den String "Hallo. Ich bin dein Guide." Schritt für Schritt abtippen lassen, dass es den visuellen Anschein macht, dass es gerade auf der Tastatur abgetippt wird.
    Jeder einzelne Buchstabe soll nach ca 0.2sec abgetippt werden.
    Klar, hierfür brauche ich einen sich ständig wiederholenden Timer. Was den Rest angeht, hab ich jedoch absolut keinen Schimmer, da ich noch nicht so bewandert bin, was Scripting angeht.


    Danke!

  • Hmmmm mir würde gerade folgendes einfallen

    #define Länge plapla
    new Zaehler;
    new BTimer;
    new InsgesamtText[Länge];
    new Buchstaben[Länge][] = {
    "ErsterBuchstabe","ZweiterBuchstabe"
    };// Oben einfach fortsetzen
    BTimer = SetTimer("Test",200,true);


    forward Test();
    public Test {
    if(Länge == Zaehler+1)return KillTimer(BTimer);
    strcat(InsgesamtText,Buchstaben[Zaehler]);
    TextDrawSetString(DeinTextdraw,InsgesamtText);
    TextDrawHideForPlayer(playerid, DeinTextdraw);
    TextDrawShowForPlayer(playerid,DeinTextdraw);
    return 1;
    }

  • glaub kaum das Arendiums Version oberhalb so klappen wird ;)


    Habe im Prinzip das gleiche schon einmal für meinen Server gebraucht:


    Funktion für Globale TextDraws:
    SetTextDrawDelayString(Text:textid, text[], timePerChar) // by nsg-page.de
    {
    if(text[0] != '\0') SetTimerEx("TextStepByStep", timePerChar, 0, "dsdd", _:textid, text, timePerChar, 1);
    return 1;
    }


    forward TextStepByStep(Text:textid, text[], timePerChar, num);
    public TextStepByStep(Text:textid, text[], timePerChar, num)
    {
    new newText[128];
    format(newText, sizeof(newText), "%s", text);
    if(newText[num] != '\0')
    {
    SetTimerEx("TextStepByStep", timePerChar, 0, "dsdd", _:textid, newText, timePerChar, num+1);
    }
    newText[num] = '\0'; // cut text
    TextDrawSetString(textid, newText);
    }
    Verwendung:
    SetTextDrawDelayString(textdrawid, "Dein Text", 200);


    Funktion für Playerbezogene TextDraws:

    SetPlayerTextDrawDelayString(playerid, PlayerText:textid, text[], timePerChar) // by nsg-page.de
    {
    if(text[0] != '\0') SetTimerEx("PlayerTextStepByStep", timePerChar, 0, "ddsdd", playerid, _:textid, text, timePerChar, 1);
    return 1;
    }


    forward PlayerTextStepByStep(playerid, PlayerText:textid, text[], timePerChar, num);
    public PlayerTextStepByStep(playerid, PlayerText:textid, text[], timePerChar, num)
    {
    new newText[128];
    format(newText, sizeof(newText), "%s", text);
    if(newText[num] != '\0')
    {
    SetTimerEx("PlayerTextStepByStep", timePerChar, 0, "ddsdd", playerid, _:textid, newText, timePerChar, num+1);
    }
    newText[num] = '\0'; // cut text
    PlayerTextDrawSetString(playerid, textid, newText);
    }Verwendung:
    SetPlayerTextDrawDelayString(playerid, textdrawid, "Dein Text", 200);


  • Sind Strings wieder entbuggt bei SetTimerEx?


    MfG