无法读取未定义的属性'getFirstExists'

时间:2016-04-17 21:46:11

标签: javascript game-engine phaser-framework

我正在使用Phaser HTML5游戏引擎创建类似入侵者的游戏。

当我尝试为'ship'和'敌人'添加碰撞测试时遇到此Cannot read property 'getFirstExists' of undefined错误...

我已经花了两天时间,仍然没有线索。 :(

请帮忙。谢谢。

var play = function(game) {}

play.prototype = {
    create: function(){
      ....
        // Add an explosion group
        this.explosions = this.game.add.group();
        this.explosions.enableBody = true;
        this.explosions.physicsBodyType = Phaser.Physics.ARCADE;
        this.explosions.createMultiple(15, 'explosion');
        this.explosions.setAll('anchor.x', 0.5);
        this.explosions.setAll('anchor.y', 0.5);
        this.explosions.forEach( function(explosion) {
          explosion.animations.add('explosion', [0, 1, 2], 10 , false);
        });
    },

    update: function(){
      ....
        this.game.physics.arcade.overlap(this.ship, this.enemyGroupSizeL,     this.shipCollision, null, this);
    },

    shipCollision: function(s, e) {
        this.explosion = this.explosions.getFirstExists(false); // ERROR
        this.explosion.reset(e.body.x + e.body.halfWidth, e.body.y + e.body.halfHeight);
        this.explosion.body.velocity.y = e.body.velocity.y;
        this.explosion.alpha = 0.7;
        this.explosion.play('explosion', 30, false, true);
        e.kill();
    }
 }

1 个答案:

答案 0 :(得分:0)

我使用typescript在Phaser中制作游戏。我认为其中一个原因可能是Phaser引擎在创建爆炸对象之前调用了Update函数(自动调用)。

添加

if(this.explosion !+ undefined) 

之前

this.game.physics.arcade.overlap(this.ship, this.enemyGroupSizeL, this.shipCollision, null, this);

在您的更新功能中。