【问题标题】:Phaser // Javascript // Player is not definedPhaser // Javascript // 未定义播放器
【发布时间】:2017-01-12 10:41:46
【问题描述】:

一切正常,除了在 update 功能中,当我放回 var player 时,它无法识别它:

"Uncaught ReferenceError: player is not defined"

(我也不确定动画)(马里奥是玩家,这是马里奥级别)

这是我的代码:

var SandBox = {

    preload:function(){

        //this.game
        console.log("preload Sand Box");

        this.game.load.image('platform', 'assets/platform.png');
        this.game.load.spritesheet('mario', 'assets/mario.png', 32, 32 , 12);
        this.game.load.image('coinbox', 'assets/coinbox.png');
    },

    create:function(){
        console.log("create Sand Box");

        var imageHeight = this.game.cache.getImage("platform").height;
        this.game.physics.startSystem(Phaser.Physics.ARCADE);

        var worldHeight = this.game.world.height;


        var ground = this.game.add.sprite(0, worldHeight - imageHeight, 'platform');
        var platform = this.game.add.sprite(250, 285, 'platform');
        var platform = this.game.add.sprite(-250, 145, 'platform');
        var platform = this.game.add.sprite(280, 285, 'coinbox');
        var player = this.game.add.sprite(32, 100, 'mario');

        this.game.physics.enable(ground);
        this.game.physics.enable(platform);
        this.game.physics.arcade.enable(player);

        player.frame = 5;
        ground.body.immovable = true;
        platform.body.immovable = true;        
        player.body.bounce.y = 0.2;
        player.body.gravity.y = 300;
        player.body.collideWorldBounds = true;


        player.animations.add('left', [0, 1, 2, 3], 10, true);
        player.animations.add('right', [5, 6, 7, 8], 10, true);

    },

    update:function(){
        console.log("update Sand Box");
        this.game.physics.arcade.enable(player);

        var hitPlatform = this.game.physics.arcade.collide(player, ground); // << THESE FUNCTIONS
    }


}

【问题讨论】:

  • player 超出范围。在函数外声明它。
  • 对不起,我不知道如何在函数外声明它。你能告诉我我需要把它放在哪一行吗?

标签: javascript var phaser-framework


【解决方案1】:

您的 sn-p 中 playerscope 对于它所在的函数是本地的。将 player 的声明(使用 var)移到外面沙盒:

var player;
var sandbox = {
    create: function() {
         //... skipping lines ...
         player = this.game.add.sprite(32, 100, 'mario');
    }, 
    Update: function() {
          //use player here
          var hitPlatform = this.game.physics.arcade.collide(player, ground); // << THESE FUNCTIONS

    }
};

或者让它成为对象的一部分:

 var sandbox = {
        create: function() {
             //... skipping lines ...
             this.player = this.game.add.sprite(32, 100, 'mario');
      }, 
      Update: function() {
            //... skipping lines ...
            //use this.player here
            var hitPlatform = this.game.physics.arcade.collide(this.player, ground);
       }
 };

【讨论】:

  • 嘿!它正在工作,但还有另一个错误:Uncaught TypeError: Cannot read property 'hasOwnProperty' of undefined
  • 好的 - 我在您的代码中没有看到对该方法的任何调用,所以我怀疑它在 Phaser 代码中......这可能是您在单独的问题中提出的问题,除非您可以创建另一个例子(例如plunkercodepen 甚至是SO snippet
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-13
  • 2023-03-24
相关资源
最近更新 更多