Phaser поддържа различни системи за физична симулация, всяка от които може да се използва като добавка към която и да е сцена. В момента на писането, рамката върви с три системи - Arcade Physics (буквално "аркадна физика", поради подобието на старите аркадни игри), Impact Physics и Matter.js. В този урок ще използваме системата Arcade Physics, чиито семплост и лекота са идеални за мобилни устройства.
След създаването на физичен спрайт, той получава свойство body
, в което се съдържа неговото физично тяло. То представя спрайтът като физичен обект в симулацията. Обектът body
притежава много свойства и методи, с които можем да си играем.
Например, един спрайт може да бъде повлиян от гравитация със следния прост код:
player.body.setGravityY(300)
Това е произволна стойност, но логически, по-високите стойности правят обекта по-тежък и го карат да пада по-бързо. Ако добавите това към кода си или отворите part5.html
, че видите, че играчът пада без да спре, напълно игнорирайки платформите, които създадохме по-рано:
Причината е, че не проверяваме за контакт между земята и играча.
Вече казахме на Phaser, че земята и платформите ни ще бъдат статични тела. Ако вместо това ги бяхме оставили да бъдат динамични и играчът се сблъскаше с тях, той щеше да спре за момент, след което всичко щеше да се разпадне. Без изрично да се посочи противното, спрайтът на земята е подвижен физичен обект и когато играчът го докосне, силата на удара би се приложила и към земята, която също би започнала да пада тъй като двата обекта би си разменили скорост.
За да позволим на играча да се сблъсква с платформите, ще използваме обект на име Collider (буквално преведено, нещо, което създава или е отговорно за сблъсък). Този обект наблюдава два физични обекта (които могат да бъдат и групи) и проверява за сблъсък или допир между тях. Ако това се случи, той може също да изпълни Ваш код, но това е необходимо, ако искаме само да наглеждаме платформите:
this.physics.add.collider(player, platforms);
Обектът Collider върши цялата магия. Взима два обекта, проверява за допир между тях и ги разделя при необходимост. В този случай му даваме спрайта на играча и групата на платформите. Достатъчно е умен, за да провери всеки член от групата, така че този един обект ще работи със земята и с всички платформи. Резултатът е твърда платформа, която не мърда: