Как рисовать спрайты с помощью функции в Phaser 3? - PullRequest
0 голосов
/ 12 мая 2019

Вот мой код:

Create (){
spawn();
}
function spawn(){
var sprite = this.physics.add.sprite(50,50,'spritesheet','red.png');
}

Теперь, когда я запускаю этот код, я получаю сообщение об ошибке:

Uncaught TypeError: Невозможно прочитать свойство 'add' из неопределенного

Проблема в спрайтовой части функции, но когда я использую тот же код в функции создания напрямую, она работает.Так как мне заставить его работать внутри внешней функции.

Ответы [ 2 ]

1 голос
/ 14 мая 2019

Как в комментариях:
В Create(), this - это нечто иное, чем this в spawn().
Следовательно, он должен быть правильно связан между этими функциями.Один из способов сделать это:

Create() {
    spawn.bind(this)
    spawn();
}
1 голос
/ 13 мая 2019

class myScene extends Phaser.Scene {

    constructor (config)
    {
      super(config);
    }

    preload ()
    {
      this.load.image('dude', 'sprites/phaser-dude.png')
    }
   
    create () 
    {
      this.spawn()
    }
    
    spawn()
    {
      var sprite = this.physics.add.sprite(50, 50, 'dude')
    }
}

var config = {
    type: Phaser.AUTO,
    parent: 'phaser-example',
    loader: {
      baseURL: 'https://cdn.jsdelivr.net/gh/samme/phaser-examples-assets@v2.0.0/assets/',
      crossOrigin: 'anonymous'
    },
    width: 800,
    height: 600,
    physics: {
      default: 'arcade',
      arcade: {
        gravity: { y: 1 }
      }
  },
};

var game = new Phaser.Game(config);

game.scene.add('myScene', myScene, true);
<script src="//cdn.jsdelivr.net/npm/phaser@3.17.0/dist/phaser.min.js"></script>
...