offline
- zmmaj
- Građanin
- Pridružio: 03 Okt 2009
- Poruke: 246
|
Napisano: 01 Feb 2010 23:34
kole017 ::
Stavi koloziju explorera sa odredjenim objektom i upisi sledeci kod:
question=show_question('Do you want to play again?');
if question=1 game_restart();
if question=0 game_end();
El nije moglo na SRPSKOM???
Ako ces da pises nekim svetskim jezikom, napisi na Kineskom...
On se i onako najvise koristi u svetu..
Dopuna: 02 Feb 2010 8:29
SKRIPTING-NASTAVAK
POgledajte gornji dijagram... Velika kocka predstavlja instancu nekog objekta u sobi... Ona , kao sto se da videti ima svoje EVENT-e ( dogadjaje) na osnovu kojih reaguje u odredjenom momentu i pod odredjenim uslovima...
Pisati kodove, kao do sada u samoj instanci, u npr CREATE EVENT-u, nije problem, sve dokle mozete pratiti ono sto ste napisali, odnosno, dokle god je vizualno smislen sadrzaj u istom eventu.
Problem nastaje kada se broj kodova poveca dovoljno, da skrolovanje kroz sami Editor koda da bi videli sve sto ste napisali , postaje smorno i naporno...
Kako resiti ovaj problem ?
M. Owermans je napravio folder u GM editoru pod nazivom "Scripts".
Cemu to sluzi ?
E, pa, unutra mozete staviti sve one kodove iz , eto npr tog Create event-a bez ikakvih problema, vizualno logicno, a da opet sve radi kako treba..
( na dijagramu su to one leve kocke.. )
Npr...
U Create event imate grupu kodova koja sluzi za iniciranje nekih varijabila... recimo sledece:
a=0;b=0;c=15; //etc...
Kliknemo desni klik na folder " Scripts", i iz menija izaberemo opciju " Create Script".
Otvara se Skripting prozor, slican kao i GM editor kodova , ali ne i isti...
Skripting prozor, ima , primeticete i naslov.
Dakle, upisite na vrhu neki smisleni naslov, npr "scr_iniciranje"
a, ispod u samo prozoru prebacite sve globale iz CREATE EVENTA objekta.
( Pri imenovanju pridrzavajte se dosadasnje prakse imenovanja... )
Kada ste sve globale, i sve sto mislite da je potrebno prebacili u skriptu, sada sve te kodove mozete izbrisati iz samog CREATE EVENTa objekta, a umesto njih, jednostavno napisati samo naziv skripte odnosno "scr_iniciranje()"
Primetice te da osim naslova, u pozivu postoje i zagrade ()...
Da to je uslov za oznacavanje poziva skripte...
Ukoliko zaboravite ove zagrade GM ce vam prijaviti gresku...
Skripte mozete iskoristiti u razlicite namene...
Npr da u njima izracunate nesto....
npr, trebate izracunati "C=A+B" u skripti "scr_izracunaj"
iz neke instance objekta, npr "o_start", ali taj isti proracun koristi jos neka instanca, npr "o_junak".
Kako ovo odraditi...?
Skripte se mogu pozivati sa do 16 argumenata ( slicno kao i dll-ovi...)
pa tako u samoj skripti mozemo napisati sledece, i to u obe pomenute instance objekta, naravno tamo ge nam treba ta kalkulacija...
A= argument0; B=argument1;
C=A+B...
return C;
(Ovo isto je moglo i na sledeci nacin odraditi... Znaci CEO gornji kod je prikazan ispod...
C= argument0+argument1;
return C;
U ovom, donjem slucaju cak i nije potrebno definisati A i B vec se direktno radi sa argumentima...
Ovakva skripta se iz same instance objekta poziva kao i gore sto sam napisao, samo upisom naslova, a u zagradi se dodaju argumenti...
Argumenti mogu biti fixni ( neki broj , string, etc) ili promenljive, kada su iste predstavljene slovom...
Argumenti su u zagradi, razdvojeni zarezom...
U istoj zagradi se mogu nalaziti razlicite vrste argumenata, i sve je dozvoljeno... Argument moze biti slovo, broj, ili bilo sta drugo pod uslovom da ispunjava GM uslove imenovanja varijabili...
npr...
1: resenje=scr_izracunaj(5,10); // ovde su argumenti nepromenljivi.
2 resenje=scr_izracunaj(G,D);// gde su G i D neke promenljive ovisne o samoj aplikaciji
3: resenje=scr_izracunaj('ja sam' , ' genije');
U sva tri slucaja skripta vraca rezultat C, koji sama instanca objekta preimenuje u "resenje", samim pozivom...
Takvo "resenje" moze koristiti u daljim akcijama...
Istoj skripti, mozete na isti nacin pristupiti iz bilo kojeg objekta, instance objekta,bilo kojeg EVENT-a , ili skripte, i uvek na isti, gore opisani nacin...
Nadam se da sam bio jasan..... Sva pitanja u vezi skripti, izvolte pa pitajte...
Verujem da ste se i sretali u dosadasnjim primerima sa ovakvim pozivanjem skripti, a pri pozivu DLL-ova su vrlo vazne, narocito ako su DLL-ovi sa vecim brojem funkcija...
E zato sam rekao da smo mozda ovo i preskocili i presli na rad sa DLL-ovima.. ali, neka,... NAdam se da je ovo barem malo rasvetlelo nejasnoce u radu sa samim DLL-ovima..
NA donjoj slici je praktican primer ovakvog nacina rada...
POgledajte poslednji red editora Skripte , u njemu stoji "vreme_upis()",
sto prakticno znaci, da sam iz ove skripte, " komanda" pozvao drugu skriptu "vreme_upis"... NAdam se da je jasno...
Osim do sada napisanih " KORISNIH" stvari od skripti, postoji jos nekoliko tako korisnih stvari...
Npr, ukoliko vise instanci koristi iste kodove , Zasto bi ste u svakoj instanci pisali to isto???
Jednostavno napravite skriptu, ubacite date kodove unutra, a u samim instancama, umesto kodova napisite samo ime skripte...
Rezultat: krajnja aplikacija ce imati 'N" manji broj redova koda.. i bice " laksa" , gde je 'N' broj instanci koji bi inace imali u sebi iste kodove...
Ja sam npr, radio aplikacije u kojima se u 100-tinak instanci provlace 15tak istih redova koda...
1 skripta je smanjila broj ukupnih broja redova koda za 100*15 =1500...
a to je pisaaaanjeeee do bola... Pa vi vidite..
Dopuna: 02 Feb 2010 9:16
NESTO O RADU SAMOG GM...
U momentu kada ste krenuli sa skriptama, potrebno, cak neophodno je reci nesto o samom redosledu izvrsavanju komandi u GM...
Komande se u GM izvrsavaju odredjenim redosledom, po inverznom staresinstvu, i JEDNA PO JEDNA gore navedenim redosledom....
Staresinstvo je kada postavite grupu drugara razlicitih godina, i kazete im da se poredjaju po godinama, tj staresinstvu od najstarijeg do najmladjeg.
U GM, najstariji deo koda, je room0 odnosno prva soba koju ste napravili...
U GM se kod koji je najstariji, prvi izvrsava... Po staresinstvu..
Cak i u samoj sobi postoji skript deo gde mozete napisati komande koje ce se prve izvrsiti jos pri kreiranju sobe...
Dalje, po staresinstvu idu instance koje ste kreirali, i njihove komande.
Svaka instanca nekog objekta koja se kreira u sobi, ima svoj ID broj...
taj ID broj linearno raste sa brojem ukupnim brojem instanci u sobi...
taj ID broj odredjuje i staresinstvo medju instancama... ona sa najmanjim brojem se prva izvrsava ( zato je inverzno staresinstvo ... najmladja po vremenu kreiranja, a najstarija po vremenu izvrsavanju komandi);
Naravno pre svih ovih, pa i room komandi, postoji grupa komandi koje su apsolutno prve pri izvrsavanju...
To su komande vezane za podesavanje same aplikacije...
Ucitavanje zvukova, sprajtova, podesavanje rezolucije , prioriteta , i mali milion ostalih stvari koje se dese pre nego se room uopste i pokrene...
Cemu sve ovo???
Pa prosto, kada dodjete u situaciju da ste sve napisali kako treba, a aplikacija radi nepredvidjeno, razmislite da li vam se komande izvrsavaju po gore opisanom staresinstvu...
Meni se ne mali broj puta desio, da aplikacija radi nestabilno, upravo zato sto nisam vodio racuna o ovoj stvari, pa se desavalo da sam trazio rezultat od instance PRE nego je ista instanca uopste uspela da ga izracuna...
Da bi ste ovo izbegli, pribegnite triku, koji cesto i ja koristim, kada imam veliki broj instanci a vrlo je bitno kada se sta izbrsava, da instance NE poredjate u sobi u pocetku, vec da svaku sledecu instancu kreirate iz predhodne...
Npr... na kraju CREATE event-a instance objekta A napisen " instance_create(x,y,B);
iz instance B kreiram C etc etc etc...
Mislim da je i ovo jasno...
|