Je ─ìas d├ít na┼í├¡ mal├® h┼Öe c├¡l. Pus┼Ñme tedy do sc├®ny spr┼íku hv─øzdi─ìek, kter├® bude moct hr├í─ì sb├¡rat. Abychom toho dos├íhli, vytvo┼Ö├¡me novou skupinu (Group) nazvanou 'stars' a napln├¡me ji. Ve funkci create p┼Öid├íme n├ísleduj├¡c├¡ k├│d (m┼»┼¥ete ho rovn─ø┼¥ vid─øt 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├¢, jako kdy┼¥ jsme tvo┼Öili skupinu (Group) plo┼íinek. Proto┼¥e pot┼Öebujeme, aby se hv─øzdi─ìky pohybovaly a odr├í┼¥ely od zem─ø, vytvo┼Ö├¡me skupinu dynamick├¢ch fyzick├¢ch t─øles, nikoli statick├¢ch.

P┼Öi tvorb─ø skupiny je mo┼¥n├® p┼Öedat konfigura─ìn├¡ objekt, kter├¢ pom┼»┼¥e s jej├¡m nastaven├¡m. V tomto p┼Ö├¡pad─ø m├í konfigura─ìn├¡ objekt t┼Öi ─ì├ísti: Nejd┼Ö├¡ve nastav├¡me kl├¡─ì k textu┼Öe s obr├ízkem hv─øzdi─ìky. Ka┼¥d├¢ potomek vytvo┼Öen├¢ t├¡mto zp┼»sobem bude m├¡t texturu s obr├ízkem hv─øzdi─ìky jako v├¢choz├¡. Potom nastavujeme vlastnost repeat (opakov├ín├¡) na 11. Proto┼¥e 1 potomek je vytvo┼Öen├¢ automaticky, 11 opakov├ín├¡ znamen├í, ┼¥e jich dostaneme celkem 12, co┼¥ je tolik, kolik pot┼Öebujeme pro na┼íi hru.

Fin├íln├¡ ─ì├íst je setXY - t├¡m nastav├¡me pozici dvan├ícti potomk┼», kter├® skupina vytvo┼Ö├¡. Ka┼¥d├¢ potomek bude um├¡st─øn s odstupem 70 pixel┼» ve sm─øru x od p┼Öedchoz├¡ho po─ì├¡naje pozic├¡ x:12 a y:0 pro prvn├¡. Tak┼¥e prvn├¡ bude na pozici 12 x 0, druh├¢ na pozici o 70 pixel┼» d├íle, tady na 82 x 0, t┼Öet├¡ na 152 x 0 a tak d├íl. Hodnoty pro krok ('step') jsou opravdu ┼íikovn├¢m zp┼»sobem jako rozm├¡stit potomky skupiny b─øhem jej├¡ho vytvo┼Öen├¡. Hodnota 70 je vybr├ína proto, ┼¥e v┼íech 12 potomk┼» bude perfektn─ø rozprost┼Öeno nap┼Ö├¡─ì obrazovkou.

Dal┼í├¡ kousek k├│du proch├íz├¡ v┼íechny potomky ve skupin─ø a nastavuje jim n├íhodnou hodnotu vlastnosti bounce (odraz) v intervalu 0.4 a┼¥ 0.8. Hodnoty pro odraz se pohybuj├¡ mezi 0, tedy ┼¥├ídn├¢ odraz, a 1 pro pln├¢ odraz. Proto┼¥e hv─øzdi─ìky jsou vytvo┼Öen├® s hodnotou 0 pro pozici y, gravitace je nech├í padat dol┼», dokud nekoliduj├¡ plo┼íinku nebo podlahu. N├íhodn├í hodnota odrazu ur─ì├¡, jak moc se odraz├¡ zp─øt ne┼¥ nakonec z┼»stanou le┼¥et v klidu.

Pokud bychom spustili k├│d tak, jak je te─Å, hv─øzdi─ìky by propadly dol┼» skrz obrazovku. Abychom tomu zabr├ínili, mus├¡me testovat jejich kolizi v┼»─ìi plo┼íink├ím. M┼»┼¥eme k tomu pou┼¥├¡t dal┼í├¡ objekt Collider:

this.physics.add.collider(stars, platforms);

Stejn─ø tak budeme testovat, zda se hr├í─ì s hv─øzdi─ìkou p┼Öekr├¢v├í nebo ne:

this.physics.add.overlap(player, stars, collectStar, null, this);

T├¡mto ┼Ö├¡k├íme Phaseru, aby testoval p┼Öekryt├¡ mezi hr├í─ìem a jakoukoli hv─øzdi─ìkou ve skupin─ø. Pokud k p┼Öekryt├¡ doch├íz├¡, pak je zavol├ína funkce 'collectStar':

function collectStar (player, star)
{
    star.disableBody(true, true);
}

Zcela jednodu┼íe zak├í┼¥eme hv─øzdi─ìce jej├¡ fyzik├íln├¡ t─øleso a jej├¡ rodi─ìovsk├¢ hern├¡ objekt je z├írove┼ê nastaven na neaktivn├¡ a neviditeln├¢, tak┼¥e zmiz├¡ z obrazovky. Pokud spust├¡me hru nyn├¡, m┼»┼¥e hr├í─ì b─øhat, sk├íkat, odr├í┼¥et se od plo┼íinek a sb├¡rat hv─øzdi─ìky, kter├® spadly shora. To nen├¡ ┼ípatn├® na p├ír ┼Ö├ídek pom─ørn─ø ─ìiteln├®ho k├│du :)

image