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:
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í: