如何使用Phaser 3中的函数绘制精灵?

时间:2019-05-12 17:42:24

标签: javascript phaser-framework

这是我的代码:

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

现在,当我运行此代码时,出现类似以下错误:

未捕获的TypeError:无法读取未定义的属性“ add”

问题出在函数的子画面部分,但是当我直接在create函数中使用相同的代码时,它就可以工作。因此,如何使它在外部函数中起作用。

2 个答案:

答案 0 :(得分:1)

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>

答案 1 :(得分:1)

与评论中一样:
Create()中,thisthis中的spawn()不同。
因此,需要在这些功能之间正确绑定。 一种方法:

Create() {
    spawn.bind(this)
    spawn();
}