Je ─ìas da┼Ñ na┼íej malej hre cie─¥. Rozsypme do sc├®ny skupinu hviezdi─ìiek, ktor├® bude na┼ía postava zbiera┼Ñ. Aby sme to dosiahli, vytvor├¡me nov├║ skupinu nazvan├║ 'stars' a napln├¡me ju. Vo funkcii create prid├íme n├ísleduj├║ci k├│d (n├íjdete ho tie┼¥ v part8.html):
stars = this.physics.add.group({
key: 'star',
repeat: 11,
setXY: { x: 12, y: 0, stepX: 70 }
});
stars.children.iterate(function (child) {
child.setBounceY(Phaser.Math.FloatBetween(0.4, 0.8));
});
Postup je podobn├¢ vytv├íraniu skupiny plo┼íiniek. Preto┼¥e potrebujeme, aby se hviezy pohybovali a odr├í┼¥ali od ter├®nu, vytvor├¡me skupinu dynamick├¢ch fyzick├¢ch telies, nie statick├¢ch.
Pri tvorbe skupiny je mo┼¥n├® pou┼¥i┼Ñ konfigura─ìn├¢ objekt, ktor├¢ pom├┤┼¥e s jej nastaven├¡m. V na┼íom pr├¡pade m├í konfigura─ìn├¢ objekt tri ─ìasti: Najsk├┤r nastav├¡me k─¥├║─ì pre text├║ru na obr├ízok hviezdy. Ka┼¥d├¢ potomok vytvoren├¢ v─Åaka konfigura─ìn├®mu objektu bude ma┼Ñ teda defaultne text├║ru s obr├ízkom hviezdy. Potom nastavujeme vlastnos┼Ñ repeat na 11. Preto┼¥e 1 potomok sa vytv├íra automaticky, 11 opakovan├¡ znamen├í, ┼¥e ich budeme ma┼Ñ celkom 12.
PoslednÛm nastavením je setXY - takto nastavíme pozíciu 12 potomkov skupiny. Potomkovia sa začnú umiestňovať od pozície x:12 a y:0 s odstupom 70 pixelov. Takŝe prvÛ bude na pozícii 12 x 0, druhÛ na pozícii o 70 pixelov ďalej, čiŝe na 82 x 0, tretí na 152 x 0 a tak ďalej. Hodnota pre krok predstavuje šikovnÛ spôsob rozmiestnenia potomkov. Hodnota 70 bola zvolená preto, aby sme rozmiestnili všetkÛch 12 potomkov perfektne na obrazovke.
─Äal┼íia ─ìas┼Ñ k├│du prech├ídza v┼íetk├¢mi potomkami v skupine a nastavuje im n├íhodnu hodnotu vlastnosti odraz v intervale od 0.4 po 0.8. Hodnoty pre odraz m├┤┼¥u by┼Ñ inak od 0, ─ìo predstavuje ┼¥iadne odr├í┼¥anie, a┼¥ po 1, ─ìo je maxim├ílne odr├í┼¥anie. Preto┼¥e hviezdy sa vytv├íraj├║ s hodnotou 0 pre poz├¡ciu y, gravit├ícia ich stiahne dole, a┼¥ sa nakoniec odrazia od plo┼íinky alebo ter├®nu. N├íhodn├í hodnota odrazu ur─ìuje, do akej v├¢┼íky sa odrazia, a┼¥ nakoniec zostan├║ le┼¥a┼Ñ v k─¥ude.
Ak by sme teraz spustili náš kód, hviezdy by prepadly dole cez obrazovku. Aby sme tomu zabránili, musíme testovať ich kolíziu s plošinkami. Pouŝijeme teda ďalší objekt Collider:
this.physics.add.collider(stars, platforms);
Podobne budeme testovať, či sa naša postava prekrÛva s hviezdou:
this.physics.add.overlap(player, stars, collectStar, null, this);
Takto hovoríme Phaseru, aby testoval prekrÛvanie medzi postavou a ĝubovoĝnou hviezdou v skupine. Ak dôjde ku prekrytiu, tak sa zavolá funkcia 'collectStar':
function collectStar (player, star)
{
star.disableBody(true, true);
}
Jednoducho deaktivujeme hviezde jej fyzik├íln├® telo a jej rodi─ìovsk├¢ hern├¢ objekt nastav├¡me na neakt├¡vny a nevidite─¥n├¢, ─ì├¡m hviezda zmizne z obrazovky. Ak spust├¡me hru teraz, tak postava m├┤┼¥e beha┼Ñ, sk├íka┼Ñ, odr├í┼¥a┼Ñ sa od plo┼íiniek a zbiera┼Ñ hviezdy padaj├║ce zhora. To nie je zl├® na p├ír riadkov pomerne ─ìitate─¥n├®ho k├│du :)
