Navigation

Část 6 - Práce s fyzikou

Phaser podporuje celou řadu různých fyzikálních systémů, z nichž každý funguje jako plugin dostupný každé scéně. V době psaní tohoto textu šlo o arkádovou fyziku (Arcade Physics) a fyzikální enginy Impact Physics a Matter.js. Pro tento tutoriál používáme jednoduchou a odlehčenou arkádovou fyziku, perfektní pro mobilní prohlížeče.

Když je vytvořen sprite, který má reagovat na herní fyziku (Physics Sprite), je mu přidělena vlastnost body, což je reference na jeho fyzikální těleso (Arcade Physics Body) uvnitř systému arkádové fyziky. Objekt 'body' má spoustu vlastností a metod, se kterými si můžeme hrát.

Například pro simulování efektu gravitace na sprite jednoduše napíšeme:

player.body.setGravityY(300)

Parametrem je libovolná hodnota, ale logicky, vyšší hodnota znamená rychlejší pád. Pokud přidáte tento kód nebo spustíte part5.html, uvidíte hráče, jak padá dolů bez zastavení a úplně ignoruje podlahu, kterou jsme vytvořili dříve:

image

Důvodem je, že zatím ještě netestujeme kolize mezi podlahou a hráčem.

Už jsme Phaseru řekli, že naše podlaha a plošinky jsou statická tělesa. Pokud bychom to neudělali a vytvořili místo nich dynamická, potom, když by s nimi hráč kolidoval, tak by se na chvilku zastavil a pak by se vše rozpadlo. To proto, že pokud není řečeno jinak, sprite pro podlahu je dynamický a když do něj hráč narazí, tak výsledná síla kolize je na něj aplikována. Tělesa si vymění svou rychlost a podlaha začne také padat.

Abychom umožnili hráči kolidovat s plošinkami, vytvoříme objekt Collider. Tento objekt monitoruje dva fyzikální objekty (což může zahrnovat i skupiny - Groups) a testuje kolize nebo překrytí mezi nimi. Pokud k nim dojde, tak je možné volitelně vyvolat zpětné volání (callback), ale pro prostou kolizi s plošinkami to nepotřebujeme.

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

Collider je ten, kdo provádí kouzlo. Vezme dva objekty, testuje, zda kolidují a provede jejich separaci. V našem případě mu předáváme hráče a skupinu plošinek. Je dostatečně chytrý, aby testoval kolizi vůči všem členům skupiny, takže toto jedno volání otestuje kolizi s podlahou a všemi plošinkami. Výsledkem je jsou pevné plošinky, které se nezhroutí:

image