WebProg-2014/Gyakorlat4
(Új oldal, tartalma: „== Mindenek elõtt == Hozzatok létre egy új projectet '''Asteroids2''' néven. Hozzatok benne létre egy '''asteroids''' package-et. Majd töltsétek le [http://math…”) |
|||
23. sor: | 23. sor: | ||
** A parent, ha megnézitek az '''AsteroidsGame''' objektum, szóval elkérjük a '''statusbar'''-ját és így már mi is "tároljuk". | ** A parent, ha megnézitek az '''AsteroidsGame''' objektum, szóval elkérjük a '''statusbar'''-ját és így már mi is "tároljuk". | ||
* Most, hogy már van '''statusbar''' itt is mûködni fog a korábbi '''setText'''-es kód, szóval próbáljátok ki. | * Most, hogy már van '''statusbar''' itt is mûködni fog a korábbi '''setText'''-es kód, szóval próbáljátok ki. | ||
− | * Ha még mindig 0-t mutat | + | * Ha még mindig 0-t mutat, ne felejtsétek el, hogy a '''score''' változót növelni kellene amikor egy aszteroida elpusztul, szóval tegyétek meg a növelést a '''destroy''' után. |
A lap 2015. március 4., 11:52-kori változata
Mindenek elõtt
Hozzatok létre egy új projectet Asteroids2 néven. Hozzatok benne létre egy asteroids package-et. Majd töltsétek le innen a hiányos java file-okat. (Ezek az elõzõ gyakorlat megoldásait tartalmazzák, plusz még egy-két módosítást, így mindenkinek le kell töltenie.)
Pontszámok
Az AsteroidsGame osztálynak van egy statusbar nevû változója, az initUI-ban van inicializálva (azaz itt jön létre egy objektum amit tárol). Láthatjátok, hogy egy 0-t tartalmazó Stringet kap, és ha elindítjátok a játékot azt is láthatjátok, hogy ezáltal a bal alsó sarokban egy 0 van a játékban. Ez lesz a pontszám, de még nem mûködik.
Most nézzünk bele a MainLoop asteroidBulletCollision metódusába. Ez fut le akkor, ha ütközik egy lövedék egy aszteroidával. Láthatjátok, hogy megkapja az aszteroidát ami ütközik és a lövedéket. Az aszteroidának meghívja a destroy metódusát majd a for ciklusban az újonnan létrejött aszteroidákat berakja az asteroidContainer-be (emlékezzetek vissza a destroy visszaadott egy tömböt az újonnan készítendõ aszteroidákról). A destroy hívása után kellene növelnünk a számlálót eggyel, egy aszteroida egy pontot ér.
- Hozzunk létre egy privát adattagot a MainLoop-nak, amiben tároljuk a pontokat (egész szám), én score-nak fogom nevezni.
- A következõ függvényhívás átállítja a statusbar értékét a megadottra:
statusbar.setText(String.valueOf( ide kell az érték ));
- Viszont van egy kis gond, hisz a statusbar az AsteroidsGame adattagja volt, azt itt nem érjük el. Hát csináljunk ide is egy referenciát hozzá:
- Menjünk vissza az AsteroidsGame osztályba és hozzunk létre egy publikus függvényt getStatusbar névvel, ami visszaadja a statusbar adattagot. A visszatérési értékét ebbõl már tudnotok kell, hogy mi.
- Térjünk vissza a MainLoop-ra, itt hozzunk létre egy megfelelõ típusú privát adattagot, amiben tároljuk a statusbar-t. Majd ezt vagy a konstruktorban vagy az initBoard-ban állítsuk be a következõ módon:
statusbar = parent.getStatusbar();
- A parent, ha megnézitek az AsteroidsGame objektum, szóval elkérjük a statusbar-ját és így már mi is "tároljuk".
- Most, hogy már van statusbar itt is mûködni fog a korábbi setText-es kód, szóval próbáljátok ki.
- Ha még mindig 0-t mutat, ne felejtsétek el, hogy a score változót növelni kellene amikor egy aszteroida elpusztul, szóval tegyétek meg a növelést a destroy után.