. .. : Swf.hu 1.0 archívum : Swf.hu főoldal >>> : .. .


 
 
SEGÉDLETEK Flash játékok

Kígyójáték megoldása minimális ActionScript kóddal
  feltöltve: 2004.10.25 | szerző: ismeretlen | olvasva: 6759 alkalommal

           
 
Megoldás by tenegri

A program működését azt hiszem nem fogom sorról sorra magyarázni, mert annyira optimalizáltam a kódot, hogy azt már én is nehezen tudom követni :) Inkább az optimalizáláshoz használt néhány módszert sorolom fel. A fla-ban igyekeztem minél kevesebb helyre script-et írni, és minél több mindent belezsúfolni a fő idővonal egy kockáján levő script-be. Ezen kívül csak egy segéd mc-n van script, ami a billenytűzetet kezeli, valamint egy nyomógombon egy sima nextFrame() és egy animációban egy stop().

  • A kígyó kanyarodásához koordináta transzformációt (forgatás) használtam a következő alapképlettel:
      x'= x * cos(alfa) + y * sin(alfa)
      y' = x * sin(alfa) + y * cos(alfa)
    A kanyarodás egy lépésének szöge egyenesen arányos a fordulási kör kerületének és a lépéshossz (10) arányával. Nekem a kanyarodás leprogramozása tette ki a kód legnagyobb részét, ez derékszögben közlekedő kígyó sokkal rövidebb lenne :)
  • A kígyó fejét megvalósító mc neve s0, míg a test utánna következő részei s1, s2, s3, stb. neveket kapnak. De mivel egy ciklusban ezekre hosszadalmas hivatkozni (pl. this["s"+i]) ezért bekerülnek egy tömbbe (a neve s) és így már rövidebben is megoldható: s[i]. A farok mc neve sl, de erre csak egyszer van hivatkozva, mikor a legelején beteszem az s tömbbe. A kígyó hosszát nem az s.length-tel tartom számon, hanem a sokkal rövidebb nevű l változóval.
  • Változók alapértelmezett értékének megadásához használhatók szövegmezők (dinamikus vagy input). Én ezt nem mindenhol alkalmaztam, kb 3-4 karaktert spórolhattam volna még vele :)
  • Egyes gyakran használt függvényeket és objektumokat el lehet látni egy rövidebb hivatkozással. Pl. a Math objektumnál: m=Math, így ezután már Math.PI helyett m.PI is használható. Vagy ugyanígy a függvényeken is lehet rövidíteni: Math.sin() helyett a sn=m.sin értékadás után egyszerűen sn() is használható.
  • A gyakran használt hosszabb kifejezéseket is be lehet tenni egy változóba. Pl. ha a s0._x-et háromszor is használom, akkor a w=s0_x már megtakarítást eredményez.
  • Egy ciklus fejrészéből nyugodtan kihagyható a számláló léptetése, az egybeépíthető a ciklusváltozóra való utolsó hivatkozással, és ez legalább 1 karakterrel kevesebbet jelent:
      for(i=0;i<10;)
        s[i++];
  • A művelettel egybépített értékadó jelek rövidebb kódot eredményeznek: pl. x=x+cx helyett x+=cx. Ugyanez áll a többire is: -=, *=, /=, !=, &=, stb.
  • Az programban a t változó jelzi, hogy éppen merre halad a kígyó (0: egyenesen; 1: jobbra; -1:balra). Van egy feltételes elágazás, ahol arra vagyok kiváncsi, hogy egyenesen halad-e vagy sem. Ez az if(t!=0) forma helyett rövidebben if(t)-ként is felirható, mivel egy számnál logikai értékké alakítva a 0 hamisat jelent, minden más pedig igazat.
  • Ha növelni vagy csökkenteni kell egy számot, akkor ahol lehet célszerű a ++ és -- használata a változónévre hivatkozó utolsó kifejezésben
  • A { és } közé zárt utasításblokkok utolsó utasításánál elmaradhat a pontosvessző a sor végén.
  • Ahol olyan kiszámítandó érték van, amelynek már fejlesztési időben tudni lehet az eredményét, akkor konkrét kiszámolt értéket is be lehet írni. Pl.: j=-t*360*(10/(2*Math.PI*r)) helyett jöhet a j=-t*1800/(m.PI*r) is.
  • Ha egy logikai változónak pl. hamis értéket akarunk adni, akkor a h=false helyett ugyanezt érhetjük el a rövidebb h=0 formával is.
  • Én a duplicateMovieClip() helyett inkább az attachMovie()-t alkalmaztam, mert rövidebb. A nevükben 7 karakter a különbség, ami még a plusz egy paraméterre (a linkage name) jutó 4 karaktert figyelembe véve is előnyösebb az attachMovie() javára. És ez a négy sem négy lenne, ha a linkage name "a" formájú közvetlen megadása helyett egy egybetűs változónevet használnék (bár nem tettem :)), amelynek dinamikus szövegmezőben adhatok értéket.

Nagyjából ezek lennének, bár biztos van pár, ami most nem jutott eszembe, de használtam és egy-két karakter nyereséget eredményezett :)

 
           
 
 

© Devnet.hu. A segédletek semmilyen formában nem másolhatók, publikálhatók a Devnet.hu és a szerzők közös írásos engedélye nélkül.
 
. .. : Swf.hu 1.0 archívum : Swf.hu főoldal >>> : .. .