Navigation

Част 7 - Контролиране на играча с клавиатурата

Ударите с платформи са страшно приятни, но играчът наистина трябва и да се движи. Може да си представяте как преглеждате документацията в търсене на правилното събитие, но това не е необходимо тук. Phaser има вградени контроли с клавиатура, част от които е тази функцийка:

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

Това създава обект cursors с четири свойства: up, down, left и right, като във всяко се съдържа обект Key, съответстващ на дадения клавиш (в този случай, четирите стрелки - горна, долна, лява и дясна). Сега трябва само да проверяваме тези клавиши в функцията си 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);
}

Добавихме доста код, но би трябвало той да бъде разбираем.

Първо проверяваме дали лявата стрелка е натисната (чрез свойството isDown). Ако е, пускаме анимацията left за бягане наляво и прилагаме отрицателна хоризонтална скорост (имайте предвид, че скоростта във физиката е векторна величина - тя има и размер, и посока. Понеже положителният край на абсцисната ос сочи надясно, отрицателна хоризонтална скорост създава движение наляво. - Б. пр.). Ако играчът е натиснал дясната стрелка, правим точно обратното. Понеже премахване цялата скорост всеки кадър, това кара играчът да движи само когато е натиснат клавиш.

Освен този тип движение, в което играчът спира щом клавишът е отпуснат, Phaser поддържа и по-сложни, с момент и ускорение, но за тази игра е необходим само сегашният ефект. Последната част от проверката за клавишите пуска анимацията turn и нулира хоризонталната скорост, ако няма натиснат клавиш.

Скок до там

Последната част от кода добавя възможността за скачане. Клавишът ни за това е горната стрелка, която и проверяваме. Има обаче и друга проверка дали играчът докосва пода - ако я нямаше, той щеше да може да скача дори и във въздуха.

Ако и двете условия са изпълнени, прилагаме отрицателна вертикална скорост от 330 пиксела за секунда на квадрат (тази мерна единица е подобна на истинската мерна единица за ускорение - метър в секунда на квадрат. Във Phaser, ординатната ос сочи надолу, а не нагоре - поради тази причина отрицателната скорост е движение нагоре. - Б. пр.). Играчът сам ще падне на земята поради гравитацията. С работещи контроли, вече имаме игрален свят. Заредете part7.html и го пробвайте. Опитайте се да промените стойности (като тази за скока, 330) на по-ниски и по-високи числа и вижте какъв е ефектът.

image