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:

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 į:Kodas: Pasirinkti visus
// 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į:Kodas: Pasirinkti visus
new
Text:judantis; - Taip pat susikuriame kintamąjį ir tekstui:Kodas: Pasirinkti visus
new
tekstas[ 128 ] = "~y~GuitarHero ~g~GuitarHero ~r~GuitarHero"; - Tada susikuriame teksto pozicijos kintamąjį:Kodas: Pasirinkti visus
new
Float:pozicija = 650.0; - Susikūrus pagrindinius kintamuosius susikuriame pagrindinę funkciją:Kodas: Pasirinkti visus
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 );
}- Per kiek tekstas pajudės į kairę pusę, šiuo atveju per 4.0.Kodas: Pasirinkti visus
pozicija -= 4.0; - Jeigu teksto visos raidės jau nebėra matomos, "pastatome" tekstą į pradinę poziciją.Kodas: Pasirinkti visus
if ( pozicija <= - strlen( tekstas ) * 10 )
pozicija = 650.0; - Paslėpiame jį ir sunaikiname seną tekstą.Kodas: Pasirinkti visus
TextDrawHideForAll( judantis );
TextDrawDestroy ( judantis ); - 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.Kodas: Pasirinkti visus
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 ); - Ir galiausiai parodome visiems žaidėjams sukurtą tekstą.Kodas: Pasirinkti visus
TextDrawShowForAll( judantis );
- Taip pat public funkcijai privalome sukurti funkcijos prototipą, tai rašome gamemod'o viršuje:Kodas: Pasirinkti visus
forward MoveText( ); - Susikuriame laikmatį (timer), kuris kas kažkiek laiko, tiksliau, kiek nurodysime, iškvies teksto judinimo funkciją:Kodas: Pasirinkti visus
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'ą:Kodas: Pasirinkti visus
public
OnGameModeExit( )
{
// Callback: OnGameModeExit( );
// Veikimas: Iškviečiamas, kai išjungiamas serveris
TextDrawDestroy( judantis );
return true;
}
Rezultatas
[youtube]xWZX2lC2NWs[/youtube]
Komanda
Judantį tekstą galima nesunkiai pakeisti panaudojant šią komandą:
Kodas: Pasirinkti visus
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;
}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:arKodas: Pasirinkti visus
TextDrawDestroy( judantis );Kodas: Pasirinkti visusSetTimer( "MoveText", 100, true ); // 100 yra lygu 0,1 sekundės
O dauguma nukopijuoja:Todėl Jums ir išmeta begalę error'ų.Kodas: Pasirinkti visusSetTimer( "MoveText", 100, true ); // 100 yra lygu 0,1 sekundės
return true;
} - Š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.
Tikiuosi ši pamoka buvo naudinga. Kaip ir visada laukiu atsiliepimų ir klausimų. ;) KOPIJUOTI GRIEŽTAI DRAUDŽIAMA.











