Pagrindinis diskusijų puslapis Grand Theft Auto multiplayer Pamokos SA-MP [GH #5] Kuriame judantį tekstą (textdraw) + video.

[GH #5] Kuriame judantį tekstą (textdraw) + video.

Pamokos sa-mp modifikacijai. Serverio kūrimo pamokos, skriptai.
GuitarHero Vartotojo avataras
Didelis žinovas
Didelis žinovas

Pranešimai: 699
Miestas: Šiauliai
Padėkojo: 5 kartus
Gavo padėkų: 50 kartus
Skype: guitarherolt
Mano serveris: Kuriamas.
Atsiliepimai: 38
Įžanga

Sveiki, manau jau pats metas parašyti, kokią nors vertingesnę ir rečiau matomą pamoką. Šį kartą pamoka bus apie judančius grafinius tekstus kitaip dar vadinamus TextDraw'ais. ;)

Teksto sukūrimas

Lengviausias būdas kaip sukurti TextDraw'ą yra naudojantis TextDraw'ų redaktoriumi. Vienas iš jų, kurį pats naudoju, yra Zamaroht TextDraw Editor. Redaktorių pasijunkite kaip paprastą filterscript'ą. Aiškinti kaip susikurti patį TextDraw'ą manau nereikia, nes viskas redaktoriuje yra aiškiai parašyta.

  • Mano sukurtas TextDraw'as atrodo taip:
    Paveikslėlis

    Uploaded with ImageShack.us

Susikūrę tesktą, jį išsisaugome, atsijungiame iš serverio, nes mūsų darbas jame baigtas ir atsidarome serverio aplanką, scriptfiles katalogą ir ten rasime TextDraw'o failą, mano atveju jis vadinasi pamokai.txt.

Skriptinimas

  • Atsidarę savo TextDraw'o failą rasime kažką panašaus į:
    // TextDraw developed using Zamaroht's Textdraw Editor 1.0

    // On top of script:
    new Text:Textdraw0;

    // In OnGameModeInit prefferably, we procced to create our textdraws:
    Textdraw0 = TextDrawCreate(1.000000, 436.000000, "GuitarHero    GuitarHero    GuitarHero");
    TextDrawBackgroundColor(Textdraw0, 255);
    TextDrawFont(Textdraw0, 2);
    TextDrawLetterSize(Textdraw0, 0.300000, 1.200000);
    TextDrawColor(Textdraw0, -1);
    TextDrawSetOutline(Textdraw0, 1);
    TextDrawSetProportional(Textdraw0, 1);

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

  • Pirmiausia gamemod'o viršuje susikuriame TextDraw'ui kintamąjį:
    new
        Text:judantis;

  • Taip pat susikuriame kintamąjį ir tekstui:
    new
        tekstas[ 128 ] = "~y~GuitarHero    ~g~GuitarHero    ~r~GuitarHero";

  • Tada susikuriame teksto pozicijos kintamąjį:
    new
        Float:pozicija = 650.0;

  • Susikūrus pagrindinius kintamuosius susikuriame pagrindinę funkciją:
    public
        MoveText( )
    {
        // Funkcija: MoveText( );
        // Veikimas: Judina TextDraw'ą

        pozicija -= 4.0;

        if ( pozicija <= - strlen( tekstas )  * 10 )
            pozicija = 650.0;
       
        TextDrawHideForAll( judantis );
        TextDrawDestroy   ( judantis );

        judantis =
        TextDrawCreate         ( pozicija, 436.0, tekstas );
        TextDrawBackgroundColor( judantis, 255 );
        TextDrawFont           ( judantis, 2 );
        TextDrawLetterSize     ( judantis, 0.30, 1.20 );
        TextDrawColor          ( judantis, -1 );
        TextDrawSetOutline     ( judantis, 1 );
        TextDrawSetProportional( judantis, 1 );

        TextDrawShowForAll( judantis );
    }

    • pozicija -= 4.0;
      Per kiek tekstas pajudės į kairę pusę, šiuo atveju per 4.0.
    • if ( pozicija <= - strlen( tekstas )  * 10 )
          pozicija = 650.0;
      Jeigu teksto visos raidės jau nebėra matomos, "pastatome" tekstą į pradinę poziciją.
    • TextDrawHideForAll( judantis );
      TextDrawDestroy   ( judantis );
      Paslėpiame jį ir sunaikiname seną tekstą.
    • judantis =
      TextDrawCreate         ( pozicija, 436.0, tekstas );
      TextDrawBackgroundColor( judantis, 255 );
      TextDrawFont           ( judantis, 2 );
      TextDrawLetterSize     ( judantis, 0.30, 1.20 );
      TextDrawColor          ( judantis, -1 );
      TextDrawSetOutline     ( judantis, 1 );
      TextDrawSetProportional( judantis, 1 );
      Sukuriame naują tekstą. Teksto poziciją nustatome iš kintamojo pozicija, tai reiškia, kad naujas tekstas bus pasislinkęs į kairę pusę. Tekstą nustatome iš kintamojo tekstas. Pastaba: Visas TextDraw'o sukūrimo funkcijas paimame iš TextDraw'o failo, tačiau vietoje pozicijos ir teksto įrašome sukurtus kintamuosius.
    • TextDrawShowForAll( judantis );
      Ir galiausiai parodome visiems žaidėjams sukurtą tekstą.
  • Taip pat public funkcijai privalome sukurti funkcijos prototipą, tai rašome gamemod'o viršuje:
    forward MoveText( );

  • Susikuriame laikmatį (timer), kuris kas kažkiek laiko, tiksliau, kiek nurodysime, iškvies teksto judinimo funkciją:
    public
        OnGameModeInit( )
    {
        // Callback: OnGameModeInit( )
        // Veikimas: Iškviečiamas, kai pasijungia serveris

        SetTimer( "MoveText", 100, true ); // 100 yra lygu 0,1 sekundės

        return true;
    }

  • Ir galiausiai išjungus gamemod'ą, sunaikiname TextDraw'ą:
    public
        OnGameModeExit( )
    {
        // Callback: OnGameModeExit( );
        // Veikimas: Iškviečiamas, kai išjungiamas serveris

        TextDrawDestroy( judantis );

        return true;
    }
Viskas! Judantis TextDraw'as sėkmingai sukurtas.

Rezultatas
[youtube]xWZX2lC2NWs[/youtube]

Komanda

Judantį tekstą galima nesunkiai pakeisti panaudojant šią komandą:
COMMAND:judantis( playerid, params[ ] )
{
    // Komanda: /judantis
    // Veikimas: Pakeičia judantį tekstą

   new
      result[ 256 ];

   if ( sscanf( params, "s[256]", result ) )
      SendClientMessage( playerid, 0xFFFFFFFF, "Naudojimas: /judantis <tekstas>" );
   else if ( strlen( result ) > strlen( tekstas ) - 1 )
       SendClientMessage( playerid, 0xFFFFFFFF, "Įrašytas tekstas yra per ilgas!" );
   else
   {
       format( tekstas, sizeof ( tekstas ), result );
      pozicija = 650.0;
   }

   return true;
}
Jei naudosite savo serveryje, nepamirškite pridėti if sąlygą, kad šią komandą galėtų naudoti tik administratoriai.

Pastabos ir patarimai

  • Nors judantys TextDraw'ai ir puiki idėja, nepatariu jų naudoti daug, nes jie apkraus serverį. Apsiribokite vienu tokiu TextDraw'u.
  • Taip pat pastebėjau, kad dauguma naujokų tiesiog paima ir nukopijuoja mano kodą į savo callback'us. Tai yra klaidinga, nes jei pas jus toks pat callback'as yra, Jums tereikia nukopijuoti nurodytas eilutes, pavyzdžiui:
    TextDrawDestroy( judantis );
    ar
    SetTimer( "MoveText", 100, true ); // 100 yra lygu 0,1 sekundės

    O dauguma nukopijuoja:
        SetTimer( "MoveText", 100, true ); // 100 yra lygu 0,1 sekundės

        return true;
    }
    Todėl Jums ir išmeta begalę error'ų.
  • Šis kodas yra tik pavyzdinis. Jį galite visaip patobulinti: padaryti, kad tekstą rodytų tik tam tikrą laiką ar tam tikram žaidėjui, pagreitinti (nepatariu) arba sulėtinti teksto judėjimo greitį ir kt.
Pabaiga
Tikiuosi ši pamoka buvo naudinga. Kaip ir visada laukiu atsiliepimų ir klausimų. ;) KOPIJUOTI GRIEŽTAI DRAUDŽIAMA.
Paskutinį kartą redagavo GuitarHero Vasaris 21st, 2012, 8:50 pm. Iš viso redaguota 1 kartą.


Už šią žinutę autorius GuitarHero gavo 3 padėkojimus
Inv1s (Vasaris 27th, 2012, 7:23 pm), juraska (Vasaris 19th, 2012, 10:10 pm), Moris (Vasaris 27th, 2012, 12:46 am)
Vertinimas: 33.33%
 

Reklama

sneroq Vartotojo avataras
Naujokas
Naujokas

Pranešimai: 69
Miestas: Kretinga
Padėkojo: 0 kartą
Gavo padėkų: 1 kartą
Skype: mfgoldenn
Atsiliepimai: 1

Neblogas dalykas. pats kurei?

GuitarHero Vartotojo avataras
Didelis žinovas
Didelis žinovas

Pranešimai: 699
Miestas: Šiauliai
Padėkojo: 5 kartus
Gavo padėkų: 50 kartus
Skype: guitarherolt
Mano serveris: Kuriamas.
Atsiliepimai: 38
sneroq rašė:
Neblogas dalykas. pats kurei?

Dėkui, pamačiau tą dalyką viename serveryje ir atkartojau tai kode. :)

juraska Vartotojo avataras
GTA-support.lt komanda

Pranešimai: 1314
Miestas: Šilalė
Padėkojo: 28 kartus
Gavo padėkų: 44 kartus
Skype: dovydasjuraska
Atsiliepimai: 29

kur video?

GuitarHero Vartotojo avataras
Didelis žinovas
Didelis žinovas

Pranešimai: 699
Miestas: Šiauliai
Padėkojo: 5 kartus
Gavo padėkų: 50 kartus
Skype: guitarherolt
Mano serveris: Kuriamas.
Atsiliepimai: 38

juraska Vartotojo avataras
GTA-support.lt komanda

Pranešimai: 1314
Miestas: Šilalė
Padėkojo: 28 kartus
Gavo padėkų: 44 kartus
Skype: dovydasjuraska
Atsiliepimai: 29

grazu
[youtube]xWZX2lC2NWs[/youtube]

[youtube]xWZX2lC2NWs[/youtube]

sancio Naujokas
Naujokas

Pranešimai: 56
Padėkojo: 0 kartą
Gavo padėkų: 0 kartą
Skype: sancio25
Mano serveris: grpgyvenimas.too.lt
Atsiliepimai: 0
As atsiunciau ta Tavo TextDraw Editore.Padariau ir pas mane issiaugojo scriptfiles/manotd.tde
ir va ka ten irasyta :

TDFile=yes
0T_Created=1
0T_Text=My-Life.LT
0T_Font=3
0T_Color=-65281
0T_BackColor=255
0T_BoxColor=255
0T_Outline=1
0T_XSize=0.789999
0T_YSize=2.800000
0T_X=487.000000
0T_Y=102.000000

NisecT Vartotojo avataras
Skripteris
Skripteris

Pranešimai: 325
Padėkojo: 18 kartus
Gavo padėkų: 11 kartus
Atsiliepimai: 9
sancio rašė:
As atsiunciau ta Tavo TextDraw Editore.Padariau ir pas mane issiaugojo scriptfiles/manotd.tde
ir va ka ten irasyta :

TDFile=yes
0T_Created=1
0T_Text=My-Life.LT
0T_Font=3
0T_Color=-65281
0T_BackColor=255
0T_BoxColor=255
0T_Outline=1
0T_XSize=0.789999
0T_YSize=2.800000
0T_X=487.000000
0T_Y=102.000000


Nu dabar dėliokis

Pirmiausia susikurk kintamajį:


new Text:pvzHello;


Toliau dėk parametrus OnGameModeInit

pvzHello = TextDrawCreate(487.000000, 102.000000, "My-Life.LT");
TextDrawLetterSize(RegBaigta, 0.789999, 2.800000);
TextDrawColor(RegBaigta, -65281);
TextDrawBackgroundColor(RegBaigta, 255);
TextDrawBoxColor(RegBaigta, 255);
TextDrawFont(RegBaigta, 3);
TextDrawSetOutline(RegBaigta, 1);


ir tęsk veiksmus pagal pamoką.


Apie pamoką:

Tikrai šaunuolis, GuitarHero :)

GuitarHero Vartotojo avataras
Didelis žinovas
Didelis žinovas

Pranešimai: 699
Miestas: Šiauliai
Padėkojo: 5 kartus
Gavo padėkų: 50 kartus
Skype: guitarherolt
Mano serveris: Kuriamas.
Atsiliepimai: 38
sancio rašė:
As atsiunciau ta Tavo TextDraw Editore.Padariau ir pas mane issiaugojo scriptfiles/manotd.tde
ir va ka ten irasyta :

TDFile=yes
0T_Created=1
0T_Text=My-Life.LT
0T_Font=3
0T_Color=-65281
0T_BackColor=255
0T_BoxColor=255
0T_Outline=1
0T_XSize=0.789999
0T_YSize=2.800000
0T_X=487.000000
0T_Y=102.000000
Ne tą failą žiūri, textdraw'as yra išsaugojamas .txt formatu, o čia tavo bendras textdraw'u projektų failas.

arnas360 Vartotojo avataras
Apsipratęs narys
Apsipratęs narys

Pranešimai: 112
Padėkojo: 15 kartus
Gavo padėkų: 2 kartus
Skype: Arnas360
Mano serveris: Neturiu
Atsiliepimai: -1
O kur ieskoti to failo?
Paveikslėlis

Jai padejau negailek +REP

UFO Vartotojo avataras
Apsipratęs narys
Apsipratęs narys

Pranešimai: 87
Miestas: Naujoji Akmene, Lietuva.
Padėkojo: 0 kartą
Gavo padėkų: 7 kartus
Skype: marsiq.
Mano serveris: Kuriu, dar kuriu.
Atsiliepimai: 1

Kaip visalaiką, puikios pamokos. :) Šaunuolis, nepagailėsiu padekos ir atsiliepimo. :)
http://Www.MP-Life.TT.LT | MultiPlayer Life Jums ir jūsų draugams ! 5%.

arnas360 Vartotojo avataras
Apsipratęs narys
Apsipratęs narys

Pranešimai: 112
Padėkojo: 15 kartus
Gavo padėkų: 2 kartus
Skype: Arnas360
Mano serveris: Neturiu
Atsiliepimai: -1
Radau

Saunuolis GuitarHero Kad kuri tokias pamokas ;)
Paveikslėlis

Jai padejau negailek +REP

Moris Naujokas
Naujokas

Pranešimai: 33
Padėkojo: 3 kartus
Gavo padėkų: 0 kartą
Skype: zilvinass6
Mano serveris: www.Los-Santos.lt
Atsiliepimai: 0
Šaunuolis, nuostabi pamoka. Viskas išsamiai paaiškinta. Džiugu..
Paveikslėlis


Paveikslėlis


Paveikslėlis

Inv1s Vartotojo avataras
Apsipratęs narys
Apsipratęs narys

Pranešimai: 246
Miestas: Panevėžys.
Padėkojo: 6 kartus
Gavo padėkų: 4 kartus
Skype: indexx7
Mano serveris: www.las-venturas.lt
Atsiliepimai: 7
Šanuolis :) Labai gera pamoka :) O norint nustatyti į kuria puse rašosi tekstas reikia pozicija pakeisti kažkuria?
Kitaip žinomas Invision_White.

Paveikslėlis

GuitarHero Vartotojo avataras
Didelis žinovas
Didelis žinovas

Pranešimai: 699
Miestas: Šiauliai
Padėkojo: 5 kartus
Gavo padėkų: 50 kartus
Skype: guitarherolt
Mano serveris: Kuriamas.
Atsiliepimai: 38
Inv1s rašė:
Šanuolis :) Labai gera pamoka :) O norint nustatyti į kuria puse rašosi tekstas reikia pozicija pakeisti kažkuria?

Kur yra:
pozicija -= 4.0;
Pakeisk į:
pozicija += 4.0;
. Dėkui visiems už gerus atsiliepimus. :)



  • Reklama

Grįžti į SA-MP