[ARHIIV] mängumeistrid
Pole sisse logitud. [Logi sisse ]
Mine lehekülje algusesse
Prinditav versioon | Telli teema e-mailile | Lisa lemmikutesse  
ABI VAJA: with ja for commandidega
herwordskill
Level 1


Liitunud: 7.4.2009
Postitusi: 6
[EEMAL]




postitati 7.4.2009 15:13 Tsiteeri
ABI VAJA: with ja for commandidega



Ma lugesin manuaali aga ei saanud aru nagu mida "with" ja "for" teevad. Kas keegi saaks lihtsalt ja kiirelt lahti seletada?

[Muudetud: 7.4.2009 herwordskill]

Vaata kasutaja profiili Otsi kasutaja postitusi Saada privaatsõnum
Crypton

Avatar

Liitunud: 18.12.2005
Postitusi: 1604
[EEMAL]




postitati 7.4.2009 15:27 Tsiteeri


with -iga saad suunata teisele objektile, mida ta tegema peab. Võib tekkida olukordi kus sul on vaja ühes objektis kontrollida teise objekti tegevust.

Nt on mul vaja "kontroll objektiga" (olgu nimeks cnt_obj) liigutada Arvuti poolt juhitavat objekti (olgu nimega o_arvuti) x-telge mööda, 5 pixlit.
Siis cnt_obj objekti step evendis kirjutan:
Kood:

with (o_arvuti)
{

x + = 5;
image_alpha = 0.5;

//ja siis tee veel midagi jne jne

}

Pane tähele seda, et with-i sees olevad muutujad kuuluvad määratud objektile. Antud juhul o_arvuti -le. cnt_obj muutujaid ma with sees kasutada ei saa, kuna neid ei leita.

Seda on kasulik kasutada kui vaja kontrollida mitmeid muutujaid ja käsklusi, mis seostub antud juhul o_arvutiga kuid vaja seda kõike kontrollida mingis teises objektis.

Midagi sellist. GM Manual räägib veel juhtumist kui vaja liigutada kõiki objekte korraga jne, siis saab with sulgudesse panna objekti nime ja liigutada kõiki instance.

Siinkohal peab teadma vahet instance ja object vahel. Kui sa sulgudesse kirjutad nt o_arvuti, siis käituvad sinu ruumis kõik o_arvuti objektid niiviisi nagu sa sinna kirjutad. Kui sa kasutad with sulgudes konkreetset instance id-d, siis saad kontrollida ühte kindlat objekti, teised jäävad puutumata.
_________

for on tsükkel (mida on veel) ja vastav õpetus, miks ja kuidas:
http://www.dmgamez.pri.ee/foorum/viewthread.php?tid=1257

Loodan et mu vb segane jutt tõi miskit selgusele.

Maze I: CryptonRalli III: Crypton<br>
Vaata kasutaja profiili Külasta kasutaja kodulehte Otsi kasutaja postitusi Saada privaatsõnum
h0lx
Kohalik sitapea
Avatar

Liitunud: 10.4.2006
Postitusi: 1826
[EEMAL]




postitati 7.4.2009 15:53 Tsiteeri


for on pmst while, mille tsükli käik määratakse kohe alguses ära.
Tubli, et manuali lugesid.

http://i47.tinypic.com/x0w83p.gif
Moonwalk
Platform II: -DMI-; H0lx&jorssJõulumäng I: h0lx&jorss
Vaata kasutaja profiili Otsi kasutaja postitusi Saada privaatsõnum
herwordskill
Level 1


Liitunud: 7.4.2009
Postitusi: 6
[EEMAL]




postitati 7.4.2009 16:06 Tsiteeri


Ma sain aru, et with on objektide kontrollija aga, milleks seda kasutada mingi objekti sees, kui võib tekitakda kontroller vms, kus juba täpsemalt määrata selle objetki tegevused jms?
Nagu ma selle with'i täpsemast põhimõttest aru ei saa.

Ja rääkides for'st, selle asemel on on palju lihtsam ja mugavam kasutada if lauseid ju, kas pole?

Vaata kasutaja profiili Otsi kasutaja postitusi Saada privaatsõnum
herwordskill
Level 1


Liitunud: 7.4.2009
Postitusi: 6
[EEMAL]




postitati 7.4.2009 16:11 Tsiteeri


Muidugi alumist, ma uurisin seda.
See for on nagu if lause ainult multi funktsionaalne vms?

Vaata kasutaja profiili Otsi kasutaja postitusi Saada privaatsõnum
Crypton

Avatar

Liitunud: 18.12.2005
Postitusi: 1604
[EEMAL]




postitati 7.4.2009 16:33 Tsiteeri


with oleneb tõesti olukorrast. With on esinenud päris mitmes kohas, kuid lühikese ajaga ei leia hetkel õiget kohta üles, mis oleks vb hea musternäide aga kõige parem oleks olukord kus ma nt kasutan skripti, mis teeb igasugu operatsioone ja nüüd toimub mingisugune muudatus skriptis kus on mul vaja liigutada teist objekti. Nt collision_line(blabla).
Kuna aga on väga raske tabada ära "liigutatavas objektis", millal ma teda konkreetselt liigutada tahan, määran ma liikumise ära objektis, mis skripti käivitas, kuna seal esineb see olukord ja teisele objektile ümber suunata on lihtsam.
Lihtsalt peab progrema, et ära tabada, vot nüüd kasutaks seda. Päris sellist universaalset asja pole. Lähenemisviise on mitmeid, kuidas sa neid lahendad on enda asi.

for on tsükkel, mis võimaldab käiata koodi kuni mingi väärtuseni.

for(i=1;i<12;i+=1){
draw_text(x,y+i,i);
}

siin kirjutatakse teksti kuni y väärtuseni y+11. (kuna konditsioon on, et i<12 siis 12 kaasa ei arvata!)
Veel on olemas while, repeat ja do tsüklid. Igal ühel on oma väike nüans, millal tsüklis väärtust omav muutuja muutub [for puhul on selleks "i", misiga tsükli alguses saab 1 juurde ( ..; i+=1){ )]ja millal tsükkel lõppeb.

See on selleks, et ühte ja sama koodi, kus muutub ainult üks number, ei peaks copy-pastema sadu kordi.

Maze I: CryptonRalli III: Crypton<br>
Vaata kasutaja profiili Külasta kasutaja kodulehte Otsi kasutaja postitusi Saada privaatsõnum
herwordskill
Level 1


Liitunud: 7.4.2009
Postitusi: 6
[EEMAL]




postitati 7.4.2009 16:39 Tsiteeri


Aga kas ma for'le mingit muut muutujat ei saa panna, "i" asemel?

Vaata kasutaja profiili Otsi kasutaja postitusi Saada privaatsõnum
Crypton

Avatar

Liitunud: 18.12.2005
Postitusi: 1604
[EEMAL]




postitati 7.4.2009 16:49 Tsiteeri


ikka saad. See on sinu defineerida.

for (a=0;...) //siin toimubki esialgne muutuja loomine, millest alustatakse, "a"asemel võib olla kasvõi ToomasNipernaadi, kuigi a-d on lihtsam kirjutada!

//siis saab seda muutujat edaspidi kasuta funtsioonides/muutujates, kus iganes:
//Näituseks:

array[0,a] = 10*a

//Kui esimese sammu ajal on a = 0 siis vastab see array[0,0] = 10*0
//Kui for sees a+=2 siis järgmine samm on "a" väärtus a+2 ja siis näeks sisu välja nii:
//array[0,2] = 10*2
//Järgmine arra[0,4] = 10*4
//JNE

Ainult ma ei oska sulle 100% kindlusega öelda, kas GM kordab tsükli kuni selle konditsioonini järjest ära, või nt käib ta esimese sammu ära, siis käib ülejäänu mängu ära ja siis teeb uue tsükli kuhu on lisatud esialgsele midagi juurde. (kahtlustan esimest poolt)
Aga See tsükkel käib ainult senikaua kuni konditsiooni pole täidetud. Kui on, siis seda tsükli sisu ignoreeritakse.

Maze I: CryptonRalli III: Crypton<br>
Vaata kasutaja profiili Külasta kasutaja kodulehte Otsi kasutaja postitusi Saada privaatsõnum
herwordskill
Level 1


Liitunud: 7.4.2009
Postitusi: 6
[EEMAL]




postitati 7.4.2009 16:56 Tsiteeri


Suured tänud teile, lõpuks sain aru, with'ga veel natukene jäi arusaamatusi aga ma proovin ise läbi. For'ga nüüd kõik selge^^.

Vaata kasutaja profiili Otsi kasutaja postitusi Saada privaatsõnum
InCreator
baksjor!
Avatar

Liitunud: 18.12.2005
Postitusi: 1230
[EEMAL]




postitati 7.4.2009 17:21 Tsiteeri


with on üks kõige vajalikumaid asju üldse.

Näiteks...

Sul on 10 objekti "vaenlane". Kõik sama objekt 10 korda

üks on valitud - kasvõi hiirega klõpsitud, näiteks tema muutuja "vali" on 1, teistel 0

Ja on vaja leida see kindel selectitud tüüp ja tema poole pöörata peategelase objekt -- ja järgnev kood võib olla mis objektis tahes, välja arvatud vaenlase enda omas

with (vaenlane) // ehk võtab ette iga objekti "vaenlane"
{
if (vali = 1) // teeb selle kontrolli
peateglane.direction = point_direction(peategelane.x,peategelane.y,x,y) // ja sobivusel täidab selle käsu
}


Ilma with käsuta on seda - nagu ka sadu muid asju, kus tuleb sama nimega objektide seast eristada vajalik -- võimatu teha. Mina küll ei tea, kuidas. Vähemalt nii, et see ei oleks haige "suure kaarega minek".

Pane veel tähele, et selles koodis x ja y on parajasti with poolt ette võetud objekti "vaenlane" omad, mitte selle objekti, mis seda koodi jooksutab. Seega, "peategelane" peab oma koodis iseenda directioni, x ja y poole pöörduma omaenda objekti nime kasutades. Sest -- With justkui astub teise objekti sisse ja omistab kõik selle objekti muutujad, loogilise sulu lõpuni. Sellest räägiti eespool ka. Vastasel juhul saaks hoopis vaenlane ise uue directioni...

lihtsustatult võib ka öelda nii:

ütleme, et õpetajad lasevad endale kuuli pähe.

Neil on selline kood:
lase_kuul_pähe(self);

...või ainult matemaatika õpetaja laseb
if (aine = "matemaatika") lase_kuul_pähe(self);

...või on sul endal telepaatiline võime sundida kõiki õpetajaid endale kuuli pähe laskma -- seega on hoopis sinu peas selline kood:

with (õpetaja)
lase_kuul_pähe(self)

...või mõjub su võime ainult mataõpsile

with (õpetaja) // võtad iga õpetaja
{
if (aine = "matemaatika") // sunnid neid endalt küsima, kas nad on matemaatika õpetajad
lase_kuul_pähe(self); // jahh? pahh!
}

lihtne?

[Muudetud: 7-4-2009 InCreator]
Emo2: InCreator
Vaata kasutaja profiili Otsi kasutaja postitusi Saada privaatsõnum
herwordskill
Level 1


Liitunud: 7.4.2009
Postitusi: 6
[EEMAL]




postitati 7.4.2009 18:03 Tsiteeri


No nüüd on see asi päris selge:D, eriti nende õpsidega xd
Tänud Teile^^

Vaata kasutaja profiili Otsi kasutaja postitusi Saada privaatsõnum

Hetkel loevad seda teemat:
Mitte ühtegi - 1 külaline

Mine lehekülje lõppu





Foorumi algbaas põhineb XMB mootoril, modifitseeritud Valter Pundi poolt
Kodulehekülg on tehtud Valter Pundi poolt vpundi ät gmail punkt komm