Foorumi logo

Asi jätkab maalimist
Maksud - 23.2.2011 17:06

Kui sa vajutad maali peale ja vajutad jah, siis ta müüb selle maha, kuid alustab kohe uut. Kuidas teha, nii et ta ei alustaks uut?

Ilma gmk alla tõmbamiseta pole võimalik aru saada sellest küsimusest.


Maksud - 24.2.2011 07:44

Pole veel lahendust leidnud.


timoolen - 24.2.2011 09:59

object1 step:

if pilt > 99
{global.joonistamine=0
alarm[0]=0
instance_change(spr_maal2,1)
}

kuna sa kasutad instance_change siis ta jätab vist kõik obj eelnevad muutujad ja alarmid alles ning käima, täpselt ei oska öelda


Zimonak - 24.2.2011 13:02

##Viga peitus selles, et sul oli nii muutuja 'pilt' kui ka 'paintinghp'. Mõlemad üritasid maali muuta, üks oli jäänud nullimata jne.. Suhteliselt segane värk, pidin viis minutit keskenduma, et asjast sotti saada. Kokkuvõtvalt: uus muutuja tee vaid siis, kui ise ka aru saad, milleks seda vaja on.

Sul oli mitu fundamenaatlset viga, mis muutiski vea otsimise raskeks:


*Pole mõtet teha objektide üleküllust. Selle asemel, et asendada object1 spr_maal2 -ga, vaheta lihtsalt object1 sprite ära.
*Samuti ei tasu lihtsat kontrolltegevust Alarmi panna (sinu gmk puhul object1-l ). Kasuta pigem step eventit.
*Pane oma objektidele ja spritidele nimed- annab sulle parema ülevaate.
*Kasuta semikooloneid- korrektsem.
*Jäi mõistetamatuks, miks oli eraldi muutujad 'pilt' ja 'paintinghp'.
*Ei tasu nii palju global. muutujaid kasutada, kui just eesmärk selline polnud.
*Võtsin maha scritpti. Liiga vähe koodi oli selle jaoks, kui sa just ei plaaninud seda kuskil mujal kasutada.
*Kasutasid mõttetult võrratust(>,<) võrduse(=) asemel. Selle asemel, et kirjutada: if elud>99 {}.., kirjuta if elud=100{}...
Loomulikult sõltub see ka konkreetsest olukorrast.

Ei tahtnud norida, kuid loodetavasti on nendest näpunäidetest kasu. Loodetavasti sa ka ei pahanda, et ma sinu gmk' struktuuri nii palju korrastasin.


batoonike - 24.2.2011 13:05

Tsitaat:
*Samuti ei tasu lihtsat kontrolltegevust Alarmi panna (sinu gmk puhul object1-l ). Kasuta pigem step eventit.


99% kontrolltegevustest, mida algajad steppi panevad, sobivad tegelt just paremini alarmi, mis käivitab end ise iga ala 5e või 20e stepi tagant. See vähendab laggi päris edukalt. Muidugi võib seda teha aint siis, kui saadakse aru, mis toimub ja kuidas alarmid töötavad.

Kui ta checkib ühel instantsil ala "if muutuja = 0" siis vahet pole muidugi, sest mingit laggi ei tule sellest.


Zimonak - 24.2.2011 13:18

Ma isegi ei oska öelda. Ma kasutan peamiselt step'i kuna saan kogu vajaliku ühte kohta trükkida (Tõsi, koodi kogupikkuseks võib kokku tulla üle A4 -ja).

Kui nüüd järele mõelda, siis GameMaker peab kogu mu pika stepi pidevalt läbi lappama, samal ajal kui alarm kas töötab või ei tööta...

Pole tegelikult kogemust laggi vähenemise kohta. Oskad näidisolukorda pakkuda?


batoonike - 24.2.2011 13:51

Tüüpiline oleks mingi strateegiamängu AI, mis mõtleb kas iga step või iga 15 stepi tagant. Tõenäoliselt mingit vahet efektiivsuses pole, lihtsalt AI mõtlemine tekitab 15 korda vähem laggi. Kui AI teeb mingeid imeasju, näiteks prognoosib kõigi unitite liikumist ja collisione 10 sekundi kaugusele tulevikku (tornibot) ja veel miljonit asja, siis on vahe vägagi tuntav.

Või kui on mingeid objekte tohutult palju. Nt mingid jälitavad missilid või lendav praht, mida on platsi peal 100 - 200 korraga. Vahet pole, kas nad muudavad suunda ja pilti iga step või iga nelja stepi tagant aga fps-s on tunda. Kui suunamuutus käib point_directioniga nt ja kuskil on point_distance jne.