A tegnap esti partin a gombokat meg játékosok számát úgy állítottuk be, hogy szépen beírtam a program kódjába, amit kellett. Ez így házon belül a tökéletes megoldás, de azért 100%-osnak nem nevezném.

upipang7/tn_menu.jpg

Úgyhogy fogtam magam, és faragtam hozzá egy menüt, ahol mindezeket be lehet állítani. Azt akartam, hogy a menü minél minimálabb legyen méretben és infrastruktúrában egyaránt. Úgyhogy először elkezdtem írni függetlenül a program többi részétől, hogy izolált legyen, de aztán rájöttem: '''ha már úgyis itt van a GameObject-es infrastruktúra, akkor akár használhatnám a menühöz is. Utána pedig rögtön rájöttem, hogy akkor semmiből nem áll megcsinálni, hogy a menüben legyenek pattogó labdák a háttérben, úgyhogy lettek.

A MenuItem egy olyan GameObject, ami egy szöveget ír ki, és ahhoz is méretezi magát. Mindig egy ilyen objektum van kiválasztva, az még egy kék hátteret is rajzol magának (ez a legkönnyebb megoldás).

Egy probléma volt: a golyók folyton belógtak a szövegek elé. Hiába raktam elején a szöveget a @GameObjects tömb tetejére (azok rajzolódnak "legfelülre"), a golyók mindig beelőzték őket idővel. A következő egy sort tanulságképpen megosztom, hogy néha mennyire egyszerű megoldás van ilyesmikre:

  while (ref($GameObjects[$#GameObjects]) ne 'MenuItem') { unshift @GameObjects, (pop @GameObjects); }

Ez emberi nyelven annyit tesz: ha a legutolsó eleme a @GameObjects tömbnek nem MenuItem típusú, akkor tedd át a tömb elejére.

Problem Solved!

A menün és kívül a további változások:

  • Beépítettem a játékba Sadam zenéjét, nagyon jól illik hozzá. Kösz Ádám!
  • Némi takarítgatást végeztem a kódon.
  • A labdák sűrűbben jönnek, ha több a játékos.
  • "P" gombbal meg lehet állítani a játékot.

Rövid pislantás a TODO listámra:

  • Super Ball (kills everything or pauses for 8 seconds)
  • Gray Ball of Death (cannot be killed except with Super Ball)
  • Color the border during death sequence
  • Music, sound effects
  • More levels, game balance for multiple players
  • Extra life at 200.000 points
  • Message while paused
  • Smaller playfield height

A legújabb változat megtekinthető itt: linuxosoknak upload:upipang7/upipang.tar.bz2 ; windowsosoknak upload:UpiPang.zip

Utoljára módosította UPi 2006.VI.22 15:11-n
Bejegyzés módosítása | PermaLink
Votes disabled.

Hozzászólások (1)

SAdam hozzászólása 2006-06-24 13:11-kor

Szia! Kösz, hogy benyomtad a zenét, majd még igyexem többet is csinálni (most már van menünk is stb.) Annyi, hogy sztem egy rövid (pl. 1 sec) delay-t be lehetne tenni, mielőtt a zene újraindul.

Tagek: