Я использую Phaser 3.11
У меня есть анимация для моего спрайта (анимация ходьбы), а также анимированный заголовок, который отображается, чтобы побудить игрока нажать (только хитрость, поэтому убедитесь, что звук будет воспроизводиться правильно). У меня также есть анимация для кошки, машущей хвостом.
Все три работали нормально на протяжении всего проекта. Но внезапно, после того, как я добавил новый спрайт, 2/3 вышеперечисленных анимаций перестали работать (цикл ходьбы и заголовок). Кошачий хвост все еще оживляет, странно. Я, конечно, вернул старый спрайт обратно, потому что это единственное, что я изменил, но нет, эта ошибка кажется постоянной.
код ниже:
в преднагрузке:
this.load.spritesheet('dude', 'assets/runner/kel2.png', {
frameWidth: 16,
frameHeight: 28,
});
this.load.spritesheet('buffy', 'assets/runner/buffy.png', {
frameWidth: 43,
frameHeight: 32,
});
this.load.spritesheet('startText', 'assets/runner/clickToStart2.png', {
frameWidth: 351,
frameHeight: 250,
});
в создании:
player = this.physics.add.sprite(playerStart, 260, 'dude').setScale(1.3)
this.anims.create({
//animations created are available globally, belonging to the game objects themselves!
key: 'left',
frames: this.anims.generateFrameNumbers('dude', { start: 0, end: 3 }),
frameRate: 10,
repeat: -1,
//use frames 0,1,2,3 at 10 fps, and -1 repeat tells it to loop
});
this.anims.create({
key: 'turn',
frames: [{ key: 'dude', frame: 4 }],
frameRate: 20,
});
this.anims.create({
key: 'right',
frames: this.anims.generateFrameNumbers('dude', { start: 5, end: 8 }),
frameRate: 10,
repeat: -1,
});
buffy = this.physics.add.sprite(3170, 270, 'buffy');
this.anims.create({
key: 'curl',
frames: this.anims.generateFrameNumbers('buffy', { start: 0, end: 1 }),
frameRate: 2,
repeat: -1,
});
startText = this.physics.add.staticSprite(240, 150, 'startText');
this.anims.create({
key: 'clickToStart',
frames: this.anims.generateFrameNumbers('startText', { start: 0, end: 1 }),
frameRate: 2,
repeat: -1,
});
в обновлении:
if (cursors.left.isDown) {
player.setVelocityX(-100);
player.anims.play('left', true);
} else if (cursors.right.isDown) {
player.setVelocityX(100);
player.anims.play('right', true);
} else {
player.setVelocityX(0);
player.anims.play('turn');
}
buffy.anims.play('curl', true);
startText.anims.play('clickToStart', true);
опять же, вторая до последней вещи в обновлении (buffy.anims.play) работает нормально
Все остальное, однако, застрял на одном кадре. Кто-нибудь когда-либо сталкивался с чем-то подобным? Я гуглю уже больше часа, но безрезультатно.
спрайт-лист cat (рабочий)
спрайт-лист игрока
титульный экран spritesheet
РЕДАКТИРОВАТЬ ДОБАВИТЬ:
Я исправил спрайт титульного экрана. Это был не глюк, я просто случайно заключил его в блок if, который зависел от того, началась ли игра еще. Вытащил, все хорошо сейчас. НО анимация прохождения спрайта все еще не работает. По-прежнему нет идей.
РЕДАКТИРОВАТЬ 2:
После некоторых копаний с console.logs я поставил диагноз:
a) программа действительно НЕ циклически повторяет кадры в своем массиве кадров (поворачивая влево или вправо, текущий кадр равен 0 или 5, но если я извлекаю предыдущий коммит, где он работал, он идет 0,1 2,3 и 5,6,7,8 соответственно)
б) У программы есть ДОСТУП к массиву кадров. он же генерирует номера кадров работает. если я консолью.log для getTotalFrames () на спрайте, а затем перехожу влево или вправо, это дает 4 для каждого соответственно (и 1 для обращенной вперед, как и должно быть).
в) если я вручную установлю начальный кадр, он изменится. Он все еще будет заморожен, но он будет заморожен на прямых ногах по сравнению с шагающими ногами, в зависимости от того, какой кадр я установил в качестве начальной точки в anims.play. Итак, опять же, у него есть все кадры, он просто не зацикливается.