Невозможно анимировать спрайт в Phaser.js

1

Я пытаюсь использовать лист спрайтов для перемещения персонажа с помощью клавиш со стрелками, но он, похоже, не работает. Если я установил, что фон будет больше 500, 500, экран будет перемещаться вместе с символом, но я хочу, чтобы персонаж свободно перемещался без движения фона с ним.

Что я могу изменить в своем коде, чтобы заставить символ перемещаться с помощью клавиш со стрелками? И заставить анимацию работать на самом деле?

Изображение 174551

window.onload = function () {
  var game = new Phaser.Game(500, 500, Phaser.AUTO, 'phaser-example',{ preload: preload, create: create });

  function preload() {

    game.stage.backgroundColor = '#fc6b84';
    game.load.spritesheet('player', 'reddude.png', 64, 64);

  }

  function create() {

    // This simply creates a sprite using the player image we loaded above and positions it at 200 x 200
    var test = game.add.sprite(250, 250, 'player');
    player.animations.add('walk');
    player.anchor.setTo(0.5, 1);
    game.physics.arcade.enable(player);
    player.body.collideWorldBounds = true;


    addItems();
    addPlatforms();

    cursors = game.input.keyboard.createCurosrKeys();
    //game set up
  }

  function update() {
    game.physics.arcade.collide(player, platforms);
    game.physics.arcade.overlap(player, items, itemHandler);
    game.physics.arcade.overlap(player, badges, badgeHandler);
    player.body.velocity.x = 0;

    // is the left cursor key presssed?
    if (cursors.left.isDown) {
      player.animations.play('walk', 10, true);
      player.body.velocity.x = -50
      player.scale.x = - 1
    }
    // is the right cursor key pressed?
    else if (cursors.right.isDown) {
      player.animations.play('walk', 10, true);
      player.body.velocity.x = 50
      player.scale.x = 1
    }
    else if (cursors.up.isDown) {
      player.animations.play('walk', 10, true);
      player.body.velocity.y = 50
      player.scale.y = 1
    }
    else if (cursors.down.isDown) {
      player.animations.play('walk', 10, true);
      player.body.velocity.y = -50
      player.scale.y = -1
    }
    // player doesn't move
    else {
      player.animations.stop();
    }
  }

}
Теги:
sprite
phaser-framework
sprite-sheet

2 ответа

1
Лучший ответ

Вы добавляете переменную sprite, называемую test, но вы добавляете анимацию в переменную с именем player. Это может быть ошибка, которую вы сделали, я имею в виду, где определяется var player?

Что касается различных анимаций для работы, вы должны добавить каждую анимацию отдельно в свою переменную sprite. Вы должны указать, какие кадры предназначены для анимации "ходьбы влево", кадры для анимации "ходьбы" и т.д. И создания отдельных анимаций. Что-то вроде этого:

// define variable globally, outside "create()", so then "update" can also use the variable
var playersprite;

// create a sprite in the "create()" function
// note: playersprite is the variable name and 'player' is the spritesheet name string
playersprite = game.add.sprite(250, 250, 'player');

// add animations to sprite
playersprite.animations.add('walk_down',  [0,1,2,3]);
playersprite.animations.add('walk_left',  [4,5,6,7]);
playersprite.animations.add('walk_right', [8,9,10,11]);
playersprite.animations.add('walk_up',    [12,13,14,15]);

И затем в зависимости от направления движения игрока, играйте в другую анимацию.

// when LEFT cursor key presssed
if (cursors.left.isDown) {
    playersprite.animations.play('walk_left', 10, true);
    // etc.
2

Вы можете сделать камеру, следуя за вашим плеером. Сначала создайте скипетр, затем добавьте следующую строку:

game.camera.follow(player);

Вы можете найти по этой ссылке, что вам нужно. https://phaser.io/examples/v2/camera/basic-follow

Кроме того, не следует ли объявлять переменную как "var player" вместо "var test" внутри функции create?

  • 0
    благодарю вас! это то, что мне было нужно! Но теперь я не могу понять, как заставить анимацию работать при перемещении персонажа, когда я нажимаю клавишу вниз, анимация воспроизводится по всему листу спрайта вместо одной строки, анимация также не останавливается, когда я отпустить ключ. Я хочу, чтобы анимация работала в разных строках, например, если я нажимаю стрелку вниз, я хочу, чтобы воспроизводился только первый ряд, а когда я отпускаю, я хочу, чтобы он остановился.
  • 0
    @hannacreed Я не уверен, что я вас понимаю, было бы хорошо, если бы вы опубликовали еще один вопрос о второй проблеме, и разместили код, связанный только с анимацией персонажей, а затем скажите нам, что работает не так, как ожидалось.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню