Navigation

Część 7 - Kontrolowanie postaci za pomocą klawiatury

Kolizje są spoko i w ogóle cool, ale musimy jeszcze dać graczowi możliwość poruszania się. Myślisz prawdopodobnie żeby udać się na stronę z dokumentacją i poszukać jak dodawać obserwacje zdarzeń (event listener). W Phaserze jest to o wiele prostsze. Posiada on mianowicie wbudowany menedżer dla klawiatury. Zobacz jakie to banalne:

cursors = this.input.keyboard.createCursorKeys();

Ten kod stworzy automatycznie obiekt obsługujący strzałki klawiatury: góra, dół, lewo i prawo. Wszystkie klawisze są instancjami obiektu Key. To co pozostaje nam zrobić to oczekiwać na ich naciśnięcie w pętli update:

if (cursors.left.isDown)
{
    player.setVelocityX(-160);

    player.anims.play('left', true);
}
else if (cursors.right.isDown)
{
    player.setVelocityX(160);

    player.anims.play('right', true);
}
else
{
    player.setVelocityX(0);

    player.anims.play('turn');
}

if (cursors.up.isDown && player.body.touching.down)
{
    player.setVelocityY(-330);
}

Mimo, że dodaliśmy tutaj sporo kodu powinien on być łatwy do zrozumienia.

Pierwszą rzeczą, którą dokonuje jest sprawdzenie czy lewy klawisz jest wciśnięty. Jeżeli jest, dodajemy negatywną horyzontalną prędkość i uruchamiamy animację biegania 'left'. Odwrotnie postępujemy w przypadku strzałki w prawo. Zerując prędkość gracza, gdy żaden klawisz nie jest przyciśnięty, tworzymy animację typu 'stop-start'.

Sprite reprezentujący gracza będzie się przemieszczał jedynie wtedy gdy któryś z klawiszy będzie wciśnięty i zatrzyma się natychmiast w przeciwnym wypadku. Phaser pozwala na tworzenie bardziej skomplikowanego ruchu z uwzględnieinem pędu i przyśpieszenia, jednakże akurat do tej gry nie będziemy go potrzebować. Ostatnią częścią jest ustawienie klatki animacji na 'turn' i zerowanie prędkości gdy żaden klawisz nie jest wciśnięty.

Skakanie

Ostatnia część kodu daje graczowi możliwość skakania. Górna strzałka odpowiada za skok i sprawdzamy w tym miejscu czy nie jest wciśnięta. Oprócz tego sprawdzamy czy gracz nie dotyka podłoża w momencie skoku. W innym przypadku pozwolilibyśmy mu na nieskończone ponowne skakanie w powietrzu.

Jeżeli oba warunki są spełnione, nadajemy graczowi wertykalną prędkość o wartości 330 pikseli na sekundę kwadrat. Gracz opadnie spowrotem na ziemię ponieważ działa na niego wcześniej zadeklarowana grawitacja. Z włączonym sterowaniem gracza mamy już świat, który można ekspolorować. Załaduj plik part7.html i pobaw się żeby sprawdzić jak to działa. Spróbuj pozmieniać różne wartości, takie jak wspomnianie 330 pikseli, na mniej lub więcej i zobacz co się stanie.

image