Peršokti į turinį
  • ŽAIDIMAI
  • , ŽAIDIMAI
  • ŽAIDIMAI

3D tEXT lABEL kuRIMAS


Dainius_Extazy

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 4815 dienas (-ų). Patariame sukurti naują temą, o ne rašyti naują pranešimą.

Už neaktyvių temų prikėlimą galite sulaukti įspėjimo ir pranešimo pašalinimo!

Recommended Posts

Taigi nusprendziau parasyti pamoka susijusia su nauju dalyku samp pasaulyje - 3D Text Label.

Taigi pradekime.

1. Kas yra 3D Text Label?

3D Text Label tai yra zaidime sukuriamas triju dimensiju tekstas, kuri galima formatuoti, atnaujinti, 'prilipdyti' bei 'atlipdyti' prie zaideju, transporto priemoniu ar tiesiog ikelti, i bet kuris viets zaidime.

2. 3D Text Label - samp modifikacijoje turi nemazai funkciju. Dabar trumpai apie jas: Create3DTextLabel - zaidime sukuria 3D teksta.

CreatePlayer3DTextLabel - zaidime sukuria 3D teksta pasirinktam zaidejui.

Delete3DTextLabel - sunaikina 3D teksta.

DeletePlayer3DTextLabel - sunaikina pasirinkto zaidejo 3D teksta.

Update3DTextLabelText - atnaujina 3D teksta.

UpdatePlayer3DTextLabelText - atnaujina pasirinkto zaidejo 3D teksta.

Attach3DTextLabelToPlayer - 'prilipdo' 3D teksta prie pasirinkto zaidejo.

Attach3DTextLabelToVehicle - 'prilipdo' 3D teksta prie pasirinktos transporto priemones.

3. Sekanciame zingsnyje parodysiu, kaip sukurti paprasta 3D Text Label'i pasirintoje vietoje. Pirmiausia turime pasirinkti ar kursime 3D Text Label'i visiems bendra, ar kiekvienam zaidejui skirtinga. Jei norite sukurti bendra, teks naudoti Create3DTextLabel funkcija.

I OnGameModeInit callback'a irasykime mineta funkcija:

Kodas: [Pasirinkti]

Create3DTextLabel("3D Tekstas", spalva, X koord, Y koord, Z koord, matymo distancija, virtualus pasaulis, matymas per sienas)

Vietoje "3D Tekstas" irasome norima teksta, as rasysiu "karine baze". Sekantis parametras 'spalva' nurodo sukurto teksto spalva. Toliau irasome koordinates X, Y ir Z, kur norime tureti teksta. Vietoj matymo distancija reikia irasyti diziausia nuotoli nuo teksto kur jis bus matomas. As pasirinksiu 50. Toliau pasirenkame virtualu pasauli, kuriame bus 3D tekstas. Pasirinksiu 0, nes tai yra pradinis pasaulis.

Ir galu gale nustatome paskutini parametrs, su kuriuo galime isjungti ar ijungti 3D Teksto matyma per sienas. As pasirinksiu 1, nes nenoriu, kad tekstas matytusi per sienas. Jei viska darete kaip as turejote gauti eilute panasia i maniske:

Kodas: [Pasirinkti]

public OnGameModeInit()

{

Create3DTextLabel("karine baze", LIGHTBLUE, -1530.2866, 482.1916, 11.0, 50, 0, 1);

return 1;

}

Ka gi dabar galime nuvykti i pasirinkta vieta zaidime ir paziureti kaip atrodo musu pirmasis 3D Text Label'is. Maniskis gavosi stai toks:

Taip pat, kaip jau minejau galime sukurti kiekvienam zaidejui atskira 3D Teksta. Tai padaryti mums reikes funkcijos - CreatePlayer3DTextLabel.

I OnPlayerConnect callback'a irasome mineta funkcija:

Kodas: [Pasirinkti]

CreatePlayer3DTextLabel(zaidejo id, "3D Tekstas", spalva, X koord, Y koord, Z koord, matymo distancija, prilipdyto zaidejo id, prilipdytos masinos id, matymas per sienas)

Jos parametrai yra beveik tokie patys, isskyrus negalesime nustatyti virtualaus pasaulio bei mums reiks nurodyti zaidejo id, kuriam bus sukurtas 3D tekstas, zaidejo id, prie kurio bus 'prilipdytas' tekstas, bei masinos id, prie kurios bus 'prilipdytas' tekstas. Ta galime padaryti pries visus parametrus prirase "playerid" ir nustate tranp. priemones id bei kita zaideja. Jei norime neprilipdyti 3D Teksto, mums reikes vietoj "prilipdyto zaidejo id" bei "prilipdytos masinos id" irasyti "INVALID_PLAYER_ID" bei "INVALID_VEHICLE_ID".

Scriptas turetu atrodyti stai taip:

Kodas: [Pasirinkti]

public OnPlayerConnect(playerid)

{

CreatePlayer3DTextLabel(playerid, "karine baze", LIGHTBLUE, -1530.2866, 482.1916, 11.0, 50, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 1);

return 1;

}

Taigi turejome gauti toki pat rezultata kaip ir su ankstesne funkcija. Jei pavyko, galime eiti prie sekancio zingsnio.

4. Kai jau ismokote sukurti 3D Text Labeli, dabar pasimokysime ji sunaikinti. Pabandykime sukurti komanda, kuri sunaikins pasirinkta 3D Text Label'i.

Pradziai pabandykime sukurti komanda, kuri sunaikins 3D Teksta kurta su Create3DTextLabel funkcija. Tam mums prireiks funkcijos - Delete3DTextLabel. Jei dar pamenate, sukurus 3D Teksta su Create3DTextLabel funkcija, tekstas visiems zaidejams bus vienas. Taigi butu nesamone jei bet kuris zaidejas galetu sunaikinti teksta, visiems kitiems zaidejams, taigi dar panaudosime IsPlayerAdmin funkcija, su kuria tai gales padaryti tik RCON administratorius.

Dabar galime pradeti rasyti scripta.

Norint kazka daryti su sukurtu 3D Text Label'iu, mums reikia jam priskirti varda. Ta padarysime sukure nauja kintamaji, tarkim 'Text3D:Tekstas'. Dabar pries Create3DTextLabel funkcija mums reikia prirasyti 3D Text Label'io pavadinima.

Toliau rasome komanda OnPlayerCommandText callback'e. Komandos pradzioje patikrinkime ar zaidejas RCON administratorius ir tik tada sunaikinkime 3D Teksta. Naikinimo funkcijos parametru yra tik 1:

Kodas: [Pasirinkti]

Delete3DTextLabel(Text3D:id)

Vietoj "Text3D:id" irasome musu sukurto 3D Text Label'io pavadinima. Jei viska darete gerai, tuomet scriptas turetu buti toks:

Kodas: [Pasirinkti]

new Text3D:Tekstas;

Kodas: [Pasirinkti]

public OnGameModeInit()

{

Tekstas = Create3DTextLabel("karine baze", LIGHTBLUE, -1530.2866, 482.1916, 11.0, 50, 0, 1);

return 1;

}

Kodas: [Pasirinkti]

public OnPlayerCommandText(playerid, cmdtext[])

{

if(!strcmp(cmdtext, "/naikinti", true))

{

if(!IsPlayerAdmin(playerid)) return 0; // Patikrina ar administratorius

Delete3DTextLabel(Text3D:Tekstas); // Sunaikina 3D Text Label'i

return 1;

}

return 0;

}

Jei viskas veikia, galime pabandyti sunaikinti 3D Text Label'i sukurta naudojant CreatePlayer3DTextLabel funkcija. Sunaikinimui naudosime funkcija - DeletePlayer3DTextLabel.Taigi kaip ir pirmai, mums reikes sukurti pavadinima. Svarbu zinoti tai jog kaip ir minejau kiekvienam zaidejui bus sukurtas atskiras 3D Text Label'is. Todel reikia sukurti ne viena pavadinima, o tiek kiek zaideju. Scripto virsuje sukuriame daug globaliu kintamuju, tarkim "PlayerText3D:Tekstas[MAX_PLAYERS]". Toliau pries OnPlayerConnect callback'e sukurto 3D Text'o funkcija parasome pavadinima. Dabar beliko sukurti sunaikinimo komanda. Kadangi sukureme kiekvienam zaidejui atskira 3D Text Label'i, tai galima sukurti komandoje sunaikinti tik jam paciam priklausanti 3D teksta. Viska parasius gaunsi toks kodas:

Kodas: [Pasirinkti]

new PlayerText3D:Tekstas[MAX_PLAYERS];

Kodas: [Pasirinkti]

public OnPlayerConnect(playerid)

{

Tekstas[playerid] = CreatePlayer3DTextLabel(playerid, "karine baze", LIGHTBLUE, -1530.2866, 482.1916, 11.0, 50, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 1);

return 1;

}

Kodas: [Pasirinkti]

public OnPlayerCommandText(playerid, cmdtext[])

{

if(!strcmp(cmdtext, "/naikinti", true))

{

DeletePlayer3DTextLabel(playerid, PlayerText3D:Tekstas[playerid]);

return 1;

}

return 0;

}

5. Dabar metas ismokti atnaujinti 3D Text Label'ius. Sitame zingsnyje pabandysiu paaiskinti kaip tai padaryti. Atnaujinti 3D tekstui naudojamos funkcijos Update3DTextLabelText ir UpdatePlayer3DTextLabelText.

Dabar pabandysime atnaujinti 3D Text Label'i, kuri mato visi (t.y. tekstas sukurtas su Create3DTextLabel funkcija. ).

Kaip visalaik kazka darant su 3D Text Label'iu - priskirkime jam pavadinima. Tarkim 'Text3D:Tekstas'. Dabar belieka atnaujinimo funkcija. Kol kas ji atrodo taip:

Kodas: [Pasirinkti]

Update3DTextLabelText(Text3D:id, spalva, "Naujas tekstas")

Parametra 'spalva' pasikeiciame i savo norima teksto spalva. O "Naujas tekstas" galime keisti i bet koki teksta. Tarkim as pakeisiu i "Atnaujinau".

O dabar dar vienas pavyzdys su atnaujinimo komanda:

Kodas: [Pasirinkti]

new Text3D:Tekstas;

Kodas: [Pasirinkti]

public OnGameModeInit()

{

Tekstas = Create3DTextLabel("karine baze", LIGHTBLUE, -1530.2866, 482.1916, 11.0, 50, 0, 1);

return 1;

}

Kodas: [Pasirinkti]

public OnPlayerCommandText(playerid, cmdtext[])

{

if(!strcmp(cmdtext, "/atnaujinti", true))

{

Update3DTextLabelText(Text3D:Tekstas, RED, "Atnaujinau" ); // Atnaujina 3D Text Label'i

return 1;

}

return 0;

}

Atnaujinant 3D Text Label'i, kuris buvo sukurtas su CreatePlayer3DTextLabel funkcija, naudosime UpdatePlayer3DTextLabelText.

Kaip visalaik, priskiriame tekstams pavadinimus. Tarkim "PlayerText3D:Tekstas[MAX_PLAYERS]". Dabar susipazinsime su funkcija. Ji atrodo stai taip:

Kodas: [Pasirinkti]

UpdatePlayer3DTextLabelText(zaidejo id, PlayerText3D:id, spalva, "Naujas tekstas")

Kaip matomte, visi parametrai tokie patys, tik reikia nustaytyti kurio zaidejo 3D Text Label'i atnaujinsim. stai vel pavyzdys su atnaujinimo komanda:

Kodas: [Pasirinkti]

new PlayerText3D:Tekstas[MAX_PLAYERS];

Kodas: [Pasirinkti]

public OnPlayerConnect(playerid)

{

Tekstas[playerid] = CreatePlayer3DTextLabel(playerid, "karine baze", LIGHTBLUE, -1530.2866, 482.1916, 11.0, 50, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 1);

return 1;

}

Kodas: [Pasirinkti]

public OnPlayerCommandText(playerid, cmdtext[])

{

if(!strcmp(cmdtext, "/atnaujinti", true))

{

UpdatePlayer3DTextLabelText(playerid, PlayerText3D:Tekstas[playerid], GREEN, "Atsinaujinau savaji 3D Text Label'i" );

return 1;

}

return 0;

}

6. Ka gi metas aptarti paskutines 2 funkcijas, tai - Attach3DTextLabelToPlayer bei Attach3DTextLabelToVehicle. Naudojant sias funkcijas imanoma 3D Text Label'i 'prilipdyti' prie bet kokios tranp. priemones arba prie bet kurio zaidejo.

Dabar pabandykim sukurti 3D text Label'a ir 'prilipdyti' ji prie zaidejo kurio id - 0. Paziurekime kaip atrodo funkcija:

Kodas: [Pasirinkti]

Attach3DTextLabelToPlayer(Text3D:id, zaidejo id, X koord, Y koord, Z koord)

Taigi galime pasirinkti parametrus. Vietoj "zaidejo id" as parasysiu 0, nes noriu, kad tekstas butu priklijuotas prie zaidejo, kurio id 0. Koordinates galiu pasiimti bet kokias. As panaudosiu tokias pacias kaip ir buvusiuose pavyzdziuose.

Sukurus 3D teksta su priskirtu pavadinimu belieka irasyti ji OnGameModeInit callback'a:

Kodas: [Pasirinkti]

new Text3D:Tekstas;

Kodas: [Pasirinkti]

public OnGameModeInit()

{

Tekstas = Create3DTextLabel("karine baze", LIGHTBLUE, -1530.2866, 482.1916, 11.0, 50, 0, 1);

Attach3DTextLabelToPlayer(Text3D:Tekstas, 0, -1530.2866, 482.1916, 11.0);

return 1;

}

Nuo siol pajudejus zaidejui, kurio id - 0, pasikeis ir 3D Text Label'io pozicija. Jeigu zaidejas pajudes link siaures - 3D tekstas taippogi pajudes ta pacia kryptimi.

Jei norite 3D Text Label'i 'prilipdyti' prie tranp. priemones jums reikes naudoti funkcija - Attach3DTextLabelToVehicle.

Funkcija atrodo panasiai kaip ir pries tai buvusi su zaidejais. Tik sioje funkcijoje vietoj zaidejo id, mums reikes pasirinkti tranp. priemones id:

Kodas: [Pasirinkti]

Attach3DTextLabelToVehicle(Text3D:id, transp. priemones id, X koord, Y koord, Z koord)

Dar vienas pavyzdys. Si karta, 3D Text Label'is bus 'prilipdytas' prie mano sukurtos masinos 'Infernus':

Kodas: [Pasirinkti]

new Text3D:Tekstas;

new Infernus;

Kodas: [Pasirinkti]

public OnGameModeInit()

{

Infernus = CreateVehicle(411,-1495.1396,583.8687,41.8075,304.3730,3,3,9000);

Tekstas = Create3DTextLabel("karine baze", LIGHTBLUE, -1530.2866, 482.1916, 11.0, 50, 0, 1);

Attach3DTextLabelToVehicle(Text3D:Tekstas, Infernus,-1530.2866, 482.1916, 11.0);

return 1;

}

  • Neigiamai 2
Nuoroda į komentarą
Dalintis per kitą puslapį

  • Parašė po 3 mėnesių...

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 4815 dienas (-ų). Patariame sukurti naują temą, o ne rašyti naują pranešimą.

Už neaktyvių temų prikėlimą galite sulaukti įspėjimo ir pranešimo pašalinimo!

Svečias
Ši tema yra užrakinta.
  • Šiame puslapyje naršo:   0 nariai

    • Nėra registruotų narių peržiūrinčių šį forumą.

Skelbimai


×
×
  • Sukurti naują...