1. Šis tinklalapis naudoja slapukus. Tęsdami būvimą šiame tinklalapyje, jūs patvirtinate, jog sutinkate priimti slapukus. Sužinoti daugiau.

Horizontalių ir vertikalių progressbar'ų kūrimas savomis rankomis

Diskusija 'Serverio kūrimo pamokos' skyriuje nuo ES.^, Rugsėjis 3, 2014.

  1. ES.^

    ES.^ Gerai žinomas narys

    Užsiregistravęs:
    Kovas 14, 2011
    Pranešimai:
    3,553
    Taškai už trofėjus:
    983
    Lytis:
    Vyras
    Vietovė:
    Klaipėda
    Pradžios puslapis:
    Įvertinimai:
    +304 / 0 / -0
    Horizontalių ir vertikalių progressbar'ų kūrimas savomis rankomis

    * Šioje pamokoje paaiškinsiu kaip greitai, kokybiškai ir lengvai sukurti progressbar'ą naudojant tik 3 textdraw'us.
    [hr=1]
    Kas tas textdraw?
    Textdraw - tekstas, kuris rodomas žaidėjui (-ams). Kažkas panašaus į kliento ir žaidimo tekstus, bet, išsiskiria tuo, kad jį galima rodyti žaidėjo ekrane bet kurioje vietoje neribotą laiką. Textdraw'as gali būti paprastu tekstu arba sudėtingos dinamines struktūros.

    Kurdami textdraw'us rankinių būdu, užtruksite ilgokai, todėl wiki ir aš rekomenduojame naudoti Zamaroht's TextDraw Editor. Jeigu jums jis netinka, galite naudoti kokį nors kitą, pavyzdžiui iPLEOMAX's TextDraw Editor.

    Informacija paimta iš wiki.​
    [hr=1]
    Kūrimas

    1 žingsnis:
    Nupiešiame bar'ą (bet koki) ir kur nors užsirašome min ir max reikšmės:
    • Horizontalaus (nuotraukoje raudonas) progressbar'o boxsize (TextDrawTextSize). Mano: min: 427.0 ir max: 525.0.
    • Vertikalaus (nuotraukoje žalias) progressbar'o fontsize (TextDrawLetterSize). Mano: min: -0.4 ir max: 9.15.

    [​IMG]
    Aš naudojau Zamaroht's TextDraw Editor. Kodas:
    Kodas (pawn):
    // TextDraw developed using Zamaroht's Textdraw Editor 1.0

    // On top of script:
    new Text:Textdraw0;
    new Text:Textdraw1;
    new Text:Textdraw2;
    new Text:Textdraw3;
    new Text:Textdraw4;
    new Text:Textdraw5;

    // In OnGameModeInit prefferably, we procced to create our textdraws:
    Textdraw0 = TextDrawCreate(430.000000, 210.000000, "horizantalus-1");
    TextDrawBackgroundColor(Textdraw0, 255);
    TextDrawFont(Textdraw0, 1);
    TextDrawLetterSize(Textdraw0, 0.000000, 1.000000);
    TextDrawColor(Textdraw0, -1);
    TextDrawSetOutline(Textdraw0, 0);
    TextDrawSetProportional(Textdraw0, 1);
    TextDrawSetShadow(Textdraw0, 1);
    TextDrawUseBox(Textdraw0, 1);
    TextDrawBoxColor(Textdraw0, 255);
    TextDrawTextSize(Textdraw0, 526.000000, 0.000000);

    Textdraw1 = TextDrawCreate(431.000000, 211.000000, "horizontalus-2");
    TextDrawBackgroundColor(Textdraw1, 255);
    TextDrawFont(Textdraw1, 1);
    TextDrawLetterSize(Textdraw1, 0.000000, 0.799999);
    TextDrawColor(Textdraw1, -1);
    TextDrawSetOutline(Textdraw1, 0);
    TextDrawSetProportional(Textdraw1, 1);
    TextDrawSetShadow(Textdraw1, 1);
    TextDrawUseBox(Textdraw1, 1);
    TextDrawBoxColor(Textdraw1, 2049715967);
    TextDrawTextSize(Textdraw1, 525.000000, 0.000000);

    Textdraw2 = TextDrawCreate(431.000000, 211.000000, "horizantalus-3");
    TextDrawBackgroundColor(Textdraw2, 255);
    TextDrawFont(Textdraw2, 1);
    TextDrawLetterSize(Textdraw2, 0.000000, 0.799999);
    TextDrawColor(Textdraw2, -1);
    TextDrawSetOutline(Textdraw2, 0);
    TextDrawSetProportional(Textdraw2, 1);
    TextDrawSetShadow(Textdraw2, 1);
    TextDrawUseBox(Textdraw2, 1);
    TextDrawBoxColor(Textdraw2, -1273414145);
    TextDrawTextSize(Textdraw2, 476.000000, 0.000000);

    Textdraw3 = TextDrawCreate(430.000000, 232.000000, "vertikalus-1");
    TextDrawBackgroundColor(Textdraw3, 255);
    TextDrawFont(Textdraw3, 1);
    TextDrawLetterSize(Textdraw3, 0.000000, 9.350000);
    TextDrawColor(Textdraw3, -1);
    TextDrawSetOutline(Textdraw3, 0);
    TextDrawSetProportional(Textdraw3, 1);
    TextDrawSetShadow(Textdraw3, 1);
    TextDrawUseBox(Textdraw3, 1);
    TextDrawBoxColor(Textdraw3, 255);
    TextDrawTextSize(Textdraw3, 441.000000, 0.000000);

    Textdraw4 = TextDrawCreate(431.000000, 233.000000, "vertikalus-2");
    TextDrawBackgroundColor(Textdraw4, 255);
    TextDrawFont(Textdraw4, 1);
    TextDrawLetterSize(Textdraw4, 0.000000, 9.149999);
    TextDrawColor(Textdraw4, -1);
    TextDrawSetOutline(Textdraw4, 0);
    TextDrawSetProportional(Textdraw4, 1);
    TextDrawSetShadow(Textdraw4, 1);
    TextDrawUseBox(Textdraw4, 1);
    TextDrawBoxColor(Textdraw4, 1331242751);
    TextDrawTextSize(Textdraw4, 440.000000, 0.000000);

    Textdraw5 = TextDrawCreate(431.000000, 233.000000, "vertikalus-3");
    TextDrawBackgroundColor(Textdraw5, 255);
    TextDrawFont(Textdraw5, 1);
    TextDrawLetterSize(Textdraw5, 0.000000, 4.574999);
    TextDrawColor(Textdraw5, -1);
    TextDrawSetOutline(Textdraw5, 0);
    TextDrawSetProportional(Textdraw5, 1);
    TextDrawSetShadow(Textdraw5, 1);
    TextDrawUseBox(Textdraw5, 1);
    TextDrawBoxColor(Textdraw5, 1872052479);
    TextDrawTextSize(Textdraw5, 440.000000, 0.000000);

    // You can now use TextDrawShowForPlayer(-ForAll), TextDrawHideForPlayer(-ForAll) and
    // TextDrawDestroy functions to show, hide, and destroy the textdraw.

    2 žingsnis:
    Įkeliame textdraw'us į gamemode'ą / filterscript'ą:
    1. Skripto pradžioje sukuriame kintamuosius į kuriuos įrašysime textdraw'ų ID:
      Kodas (pawn):
      new Text:horTD[3], Text:verTD[3];
    2. Į OnGameModeInit arba OnFilterScriptInit įkeliame kodą kuris sukurs textdraw'us:
      Kodas (pawn):
      /* Horizontalaus textdraw'o juodas box'as*/
      horTD[0] = TextDrawCreate(430.000000, 210.000000, "horizantalus-1");
      TextDrawFont(horTD[0], 1);
      TextDrawLetterSize(horTD[0], 0.000000, 1.000000);
      TextDrawUseBox(horTD[0], 1);
      TextDrawBoxColor(horTD[0], 255);
      TextDrawTextSize(horTD[0], 526.000000, 0.000000);
      /* Horizontalaus textdraw'o tamsus raduonas box'as*/
      horTD[1] = TextDrawCreate(431.000000, 211.000000, "horizontalus-2");
      TextDrawFont(horTD[1], 1);
      TextDrawLetterSize(horTD[1], 0.000000, 0.799999);
      TextDrawUseBox(horTD[1], 1);
      TextDrawBoxColor(horTD[1], 0x5a0c0eFF);
      TextDrawTextSize(horTD[1], 525.000000, 0.000000);
      /* Horizontalaus textdraw'o raduonas box'as - progressbar'as */
      horTD[2] = TextDrawCreate(431.000000, 211.000000, "horizantalus-3");
      TextDrawFont(horTD[2], 1);
      TextDrawLetterSize(horTD[2], 0.000000, 0.799999);
      TextDrawUseBox(horTD[2], 1);
      TextDrawBoxColor(horTD[2], 0xb4191dFF);
      TextDrawTextSize(horTD[2], 476.000000, 0.000000);
      /* Vertikalaus textdraw'o juodas box'as*/
      verTD[0] = TextDrawCreate(430.000000, 232.000000, "vertikalus-1");
      TextDrawFont(verTD[0], 1);
      TextDrawLetterSize(verTD[0], 0.000000, 9.350000);
      TextDrawUseBox(verTD[0], 1);
      TextDrawBoxColor(verTD[0], 255);
      TextDrawTextSize(verTD[0], 441.000000, 0.000000);
      /* Vertikalaus textdraw'o tamsus žalias box'as*/
      verTD[1] = TextDrawCreate(431.000000, 233.000000, "vertikalus-2");
      TextDrawFont(verTD[1], 1);
      TextDrawLetterSize(verTD[1], 0.000000, 9.149999);
      TextDrawUseBox(verTD[1], 1);
      TextDrawBoxColor(verTD[1], 0x2f5926FF);
      TextDrawTextSize(verTD[1], 440.000000, 0.000000);
      /* Vertikalaus textdraw'o žalias box'as - progressbar'as */
      verTD[2] = TextDrawCreate(431.000000, 233.000000, "vertikalus-3");
      TextDrawFont(verTD[2], 1);
      TextDrawLetterSize(verTD[2], 0.000000, 4.574999);
      TextDrawUseBox(verTD[2], 1);
      TextDrawBoxColor(verTD[2], 0x4f9540FF);
      TextDrawTextSize(verTD[2], 440.000000, 0.000000);
      TextDrawCreate - funkcija kuri sukuria textdraw'ą.
      TextDrawFont - textdraw'o šrifto stilius.
      TextDrawLetterSize - textdraw'o šrifto dydis.
      TextDrawUseBox - textdraw'o „dėžė“.
      TextDrawBoxColor - textdraw'o „dėžės“ spalva.
      TextDrawTextSize - textdraw'o dydis. Mūsų atveju tai textdraw'o „dėžės“ dydis.

    3 žingsnis:
    • Apskaičiuojame skirtumą tarp min ir max:
      • Horizontalaus (nuotraukoje raudonas) progressbar'o boxsize (TextDrawTextSize). Mano textdraw'o: 98.
      • Vertikalaus (nuotraukoje žalias) progressbar'o fontsize (TextDrawLetterSize). Mano textdraw'o: 9.55.
    • Apskaičiuojam 1 progreessbar %. Skaičiuojam pagal formulę:
      • Horizontalaus (nuotraukoje raudonas) progressbar'o: skirtumas tarp min ir max / 100. Pas mane: 98 / 100 = 0.98.
      • Vertikalaus (nuotraukoje žalias) progressbar'o: skirtumas tarp min ir max / 100. Pas mane: 9.55 / 100 = 0.0955.

    4 žingsnis:
    Rašom formulę kuri skaičiuos už mus:
    • Horizontalaus (nuotraukoje raudonas) progressbar'o: min boxsize + ([bet koks skaičius nuo 1 iki 100] * 1 progreessbar %). Pas mane: 427.0 + ([bet koks skaičius nuo 1 iki 100] * 0.98).
    • Vertikalaus (nuotraukoje žalias) progressbar'o: min fontsize + ([bet koks skaičius nuo 1 iki 100] * 1 progreessbar %). Pas mane -0.4 + ([bet koks skaičius nuo 1 iki 100] * 0.0955)

    Naudojimas:
    Kodas (pawn):
    /* Rodom progressbar'ą žaidėjui */
    new Float:amount; // kintamasis į kuri įrašysim rezultatą
    /* Horizontalus progressbar'as */
    amount = (427.0 + ([bet koks skaičius nuo 1 iki 100] * 0.98));
    TextDrawTextSize(horTD[2], amount, 0.0);
    TextDrawShowForPlayer(playerid, horTD[2]);
    /* Vertikalus progressbar'as */
    amount = (-0.4 + ([bet koks skaičius nuo 1 iki 100] * 0.0955));
    TextDrawLetterSize(verTD[2], 0.0, amount);
    TextDrawShowForPlayer(playerid, verTD[2]);
    [hr=1]
    Autorius: ES.^
     
    • Mėgstu Mėgstu x 5

Dalintis šiuo puslapiu

Kraunama...