Почему отображаются 2 спрайта вместо 1? - PullRequest
0 голосов
/ 15 октября 2018

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

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

var player;
var cursors;
var anim;


class fightGame extends Phaser.Scene {
constructor(){
  super("fightGame");
}

preload(){
  this.load.spritesheet('programCode', 'assets/sprites/player/programador/spritesheet/spriteCoder.png', {frameWidth: 187, frameHeight: 360, endFrame:6});
}


create ()
{
    var platforms = this.physics.add.staticGroup();
    player = this.physics.add.sprite(100, 450, 'programCode').setScale(0.4);
    player.setBounce(1.2);
    player.setCollideWorldBounds(true);
    this.anims.create({
      key: 'bounce',
      frames: this.anims.generateFrameNumbers('programCode', { start: 0, end: 1 }),
      frameRate: 0.22,
      yoyo: true,
      repeat: -1
    });

    player.anims.load('bounce');

    this.anims.create({
        key: 'left',
        frames: this.anims.generateFrameNumbers('programCode', { start: 2, end: 6 }),
        frameRate: 0.355,
        repeat: -1
    });


    this.anims.create({
        key: 'right',
        frames: this.anims.generateFrameNumbers('programCode', { start: 2, end: 6 }),
        frameRate: 0.355,
        repeat: -1
    });

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

}

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

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

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

        player.anims.play('bounce', true);
    }

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

1 Ответ

0 голосов
/ 20 октября 2018

У вас есть пара проблем:

Во-первых, вы запускаете свою fightGame сцену несколько раз.

this.input.keyboard.on('keydown_ENTER', function(event) {
    spriteSelec.anims.pause();
    spriteSelec2.anims.pause();
    spriteSelec3.anims.pause();
    spriteSelec4.anims.pause();
    spriteSelec5.anims.pause();
    spriteSelec6.anims.pause();

    this.input.keyboard.on('keydown_ENTER', function(event) {
        this.scene.start('fightGame');
    },this);
}, this); 

Это может быть в настоящее время в вашем update, но должновместо этого быть в create.Как и сейчас, это привязка к клавише enter при каждом обновлении, в то время как вы хотите, чтобы она связывалась только один раз.

Во-вторых, поскольку вы учли загрузку нескольких сценВаши значения анимации frameRate s и player.setVelocityX(); должны быть изменены.Если вы измените первое на 10 и увеличите второе на 100, вы увидите, что это немного более плавно, но вам нужно будет настроить его дальше.

Привязка событий к клавишам несколько раз - довольно распространенная проблема.и это сложно отладить, если вы не шагаете по коду;Я нахожу старый способ бросить console.log('create'); в верхнюю часть функции create как простой первый шаг.:)

...