Peršokti į turinį

[Pamoka]Vartai


bebras

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 3928 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

Sveiki, iš pavadinimo turbūt manot kad išmokysiu kaip pasidaryt judančius vartus, jeigu taip, labai klystat. Čia taipat nėra jokių optimizacijų. Aš tik siūlau kaip galima (mano nuomone) supaprastinti tai.

Neseniai atradau visai neblogą palengvinimą(bent aš taip manau) kaip sekti ar vartai uždaryti ar atidaryti.

Tam yra keli būdai, pradėkim nuo baisiausio:


if(GetPVarInt(playerid, "Vartai") == 0)
{

SetPVarInt(playerid, "Vartai", 1);
  //Atidarom vartus
}
else if(GetPVarInt(playerid, "Vartai") == 1)
{

SetPVarInt(playerid, "Vartai", 0);
  //Uždarom vartus
}

Kaikam gal tai atrodo puiki mintis: nereikia papildomų kintamųjų....BET yra daugybė minusų: pirmiausia patys PVar, jie yra lėti ir (bent man) nepatogūs,toliau PVar yra "PlayerVariables" sutrumpinimas, kodėl reikia tikrint ar vartai uždaryti pas žaidėją? Jie visi turi atskirus vartus? Todėl šitas būdas turėtų išvis nebūt naudojamas.

Sekantis būdas ko gero yra populiariausias:

new bool:Vartai; //Globalus kintamasis


if(Vartai)
{
 //Atidarom
 Vartai = false;
}
else if(!Vartai)
{
   //Uždarom
  Vartai = true;
}

Paprasta ir patogu! Daug lengviau negu PVars, taipat naudojama mažiau atminties, nes saugom vieną kintamąjį, ne kiekvienam žaidėjui atskirai.

Nors minėtas būdas yra geras, kai gamemode yra nemažai vartų tų globalių kintamųjų susikaupia visas kalnas, todėl aš susiradau dar vieną būdą!

Local kintamieji. Aišku kyla klausimas: kaip? Juk jie gyvena tik funkcijoje kur jie buvo sukurti, ar ne? Taip, bet yra ir kitokie "vietiniai" kintamieji, kurie nepraranda vertės tarp funkcijos kvietimų, jie vadinasi "Static local" kintamieji.


funckija
{
static bool:vartai;
if(vartai)
{
 //Atidarom vartus
 vartai = false;
}
else if(!vartai)
{
  //Uždarom vartus
  vartai = true;
}
return 1;
}

Ir viskas! Nors kintamasis yra vietinis jis nepraras vertės, vartai funkcionuos be problemų.

Dar viena smulkmena su bool kaip sutrumpinti kodą:


funkcija
{
 static bool:Vartai;
 if(Vartai) //Atidarom vartus
 else if(!Vartai) //Uždarom vartus
 Vartai = !Vartai;
 return 1;
}

Taigi, ši eilutė: "Vartai = !Vartai;" Ką mes čia padarom? Į kintamąjį 'Vartai' priskiriam kintamojo 'Vartai' priešingybę.

Tai galima sutrumpinti iki: "Vartai != Vartai";

Tai tiek! Dar kartą: tai nėra optimizacija ar "geresnis būdas", tai tik pasiūlymas, nes man tai atrodo patogiau. Nors taspats kalnas kintamųjų ir susikaups, bet jis bus ne prie globaliųjų, ir man tai atrodo geriau.

Ačiū už dėmesį.

  • Teigiamai 1
Nuoroda į komentarą
Dalintis per kitą puslapį

Sveiki, iš pavadinimo turbūt manot kad išmokysiu kaip pasidaryt judančius vartus, jeigu taip, labai klystat. Čia taipat nėra jokių optimizacijų. Aš tik siūlau kaip galima (mano nuomone) supaprastinti tai.

Neseniai atradau visai neblogą palengvinimą(bent aš taip manau) kaip sekti ar vartai uždaryti ar atidaryti.

Tam yra keli būdai, pradėkim nuo baisiausio:


if(GetPVarInt(playerid, "Vartai") == 0)
{

SetPVarInt(playerid, "Vartai", 1);
 //Atidarom vartus
}
else if(GetPVarInt(playerid, "Vartai") == 1)
{

SetPVarInt(playerid, "Vartai", 0);
 //Uždarom vartus
}

Kaikam gal tai atrodo puiki mintis: nereikia papildomų kintamųjų....BET yra daugybė minusų: pirmiausia patys PVar, jie yra lėti ir (bent man) nepatogūs,toliau PVar yra "PlayerVariables" sutrumpinimas, kodėl reikia tikrint ar vartai uždaryti pas žaidėją? Jie visi turi atskirus vartus? Todėl šitas būdas turėtų išvis nebūt naudojamas.

Sekantis būdas ko gero yra populiariausias:

new bool:Vartai; //Globalus kintamasis


if(Vartai)
{
 //Atidarom
 Vartai = false;
}
else if(!Vartai)
{
//Uždarom
Vartai = true;
}

Paprasta ir patogu! Daug lengviau negu PVars, taipat naudojama mažiau atminties, nes saugom vieną kintamąjį, ne kiekvienam žaidėjui atskirai.

Nors minėtas būdas yra geras, kai gamemode yra nemažai vartų tų globalių kintamųjų susikaupia visas kalnas, todėl aš susiradau dar vieną būdą!

Local kintamieji. Aišku kyla klausimas: kaip? Juk jie gyvena tik funkcijoje kur jie buvo sukurti, ar ne? Taip, bet yra ir kitokie "vietiniai" kintamieji, kurie nepraranda vertės tarp funkcijos kvietimų, jie vadinasi "Static local" kintamieji.


funckija
{
static bool:vartai;
if(vartai)
{
 //Atidarom vartus
 vartai = false;
}
else if(!vartai)
{
//Uždarom vartus
vartai = true;
}
return 1;
}

Ir viskas! Nors kintamasis yra vietinis jis nepraras vertės, vartai funkcionuos be problemų.

Dar viena smulkmena su bool kaip sutrumpinti kodą:


funkcija
{
static bool:Vartai;
if(Vartai) //Atidarom vartus
else if(!Vartai) //Uždarom vartus
Vartai = !Vartai;
return 1;
}

Taigi, ši eilutė: "Vartai = !Vartai;" Ką mes čia padarom? Į kintamąjį 'Vartai' priskiriam kintamojo 'Vartai' priešingybę.

Tai galima sutrumpinti iki: "Vartai != Vartai";

Tai tiek! Dar kartą: tai nėra optimizacija ar "geresnis būdas", tai tik pasiūlymas, nes man tai atrodo patogiau. Nors taspats kalnas kintamųjų ir susikaups, bet jis bus ne prie globaliųjų, ir man tai atrodo geriau.

Ačiū už dėmesį.

Išpradžių pažiūrėjau į viršų, net išsigandau, pirma mintis "Dusk pradėjo servo laginimo pamokas daryt?", bet paskaičiau toliau, ir pamačiau, kad gera pamoka. :D

Nuoroda į komentarą
Dalintis per kitą puslapį

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 3928 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ą...