Javascript 未捕获类型错误:无法读取属性';应用';不定相器的设计

Javascript 未捕获类型错误:无法读取属性';应用';不定相器的设计,javascript,undefined,phaser-framework,Javascript,Undefined,Phaser Framework,未捕获的TypeError:无法读取未定义的属性'apply'??那是什么意思 我的意思是我试着调试它,但都不能解决问题。非常感谢您的帮助。你们需要什么来帮助解决这个问题,请随时问我。谢谢大家! 这是我的密码: var game = new Phaser.Game(500, 550, Phaser.CANVAS, 'gameDiv'); var CountDown = { preload: function() { }, update: function() {

未捕获的TypeError:无法读取未定义的属性'apply'??那是什么意思

我的意思是我试着调试它,但都不能解决问题。非常感谢您的帮助。你们需要什么来帮助解决这个问题,请随时问我。谢谢大家!

这是我的密码:

var game = new Phaser.Game(500, 550, Phaser.CANVAS, 'gameDiv');

var CountDown = {

    preload: function() {
    },
    update: function() {
    },
    render: function() {
    }
}
var player;
var bullets;
var enemies;
var greenEnemies
var bulletTimer = 0;
var mainState = {

    preload: function() {
        game.load.image('background', 'http://s1.postimg.org/nqynk9tkv/starfield.png')
        game.load.image('player', 'http://s28.postimg.org/9qdf4xrfx/145103252914234.gif')
        game.load.image('bullet', 'http://s9.postimg.org/z2bptetxn/bullet.png');
        game.load.image('green', 'http://s28.postimg.org/kpmq4byt5/enemy_green.png')
    },

    create: function() {
        this.backgroundImg = this.game.add.tileSprite(0, 0, 500, 550, 'background')
        player = game.add.sprite(game.world.centerX, 500, 'player')
        player.anchor.setTo(0.5)
        player.scale.setTo(0.25)
        game.physics.arcade.enable(player);
        game.physics.enable(player, Phaser.Physics.ARCADE);
        player.body.collideWorldBounds = true;
        this.game.inputEnabled = true;
        this.game.input.useHandCursor = true;
        player.body.maxVelocity.setTo(400, 400)
        player.body.drag.setTo(400, 400)

        //  The baddies!
    greenEnemies = game.add.group();
    greenEnemies.enableBody = true;
    greenEnemies.physicsBodyType = Phaser.Physics.ARCADE;
    greenEnemies.createMultiple(5, 'green');
    greenEnemies.setAll('anchor.x', 0.5);
    greenEnemies.setAll('anchor.y', 0.5);
    greenEnemies.setAll('scale.x', 0.5);
    greenEnemies.setAll('scale.y', 0.5);
    greenEnemies.setAll('angle', 180);
    greenEnemies.setAll('outOfBoundsKill', true);
    greenEnemies.setAll('checkWorldBounds', true);

    this.launchGreenEnemy();

        bullets = game.add.group();
        bullets.enableBody = true;
        bullets.physicsBodyType = Phaser.Physics.ARCADE;
        bullets.createMultiple(30, 'bullet');
        bullets.setAll('anchor.x', 0.5);
        bullets.setAll('anchor.y', 1);
        bullets.setAll('outOfBoundsKill', true);
        bullets.setAll('checkWorldBounds', true);

        this.cursors = game.input.keyboard.createCursorKeys();
        this.fireButton = game.input.keyboard.addKey(Phaser.Keyboard.SPACEBAR)
    },

    update: function() {
        this.backgroundImg.tilePosition.y += 2;
        player.body.acceleration.x = 0;
        if (this.cursors.left.isDown) {
            player.body.acceleration.x -= 600;


        } else if (this.cursors.right.isDown) {
            player.body.acceleration.x += 600;
        }

        if (this.fireButton.isDown) {
            //Grab first bullet from the pool

            if (game.time.now > bulletTimer) {
                var bullet = bullets.getFirstExists(false);
                if (bullet) {
                    bullet.reset(player.x, player.y + 8);
                    //Getting it up
                    bullet.body.velocity.y = -400;
                    bulletTimer = game.time.now + 250;
                }
            }
        }
    },

    launchGreenEnemy: function(){

    var MIN_ENEMY_SPACING = 300;
    var MAX_ENEMY_SPACING = 3000;
    var ENEMY_SPEED = 300;

    var enemy = greenEnemies.getFirstExists(false);
    if (enemy) {
        enemy.reset(game.rnd.integerInRange(0, game.width), -20);
        enemy.body.velocity.x = game.rnd.integerInRange(-300, 300);
        enemy.body.velocity.y = ENEMY_SPEED;
        enemy.body.drag.x = 100;
    }

    //  Send another enemy soon
    game.time.events.add(game.rnd.integerInRange(300, 3000), this.launchGreenEnemy);
    },

    // Restart the game
    platformsCreate: function() {

    }
};

var Menu = {
    preload: function() {
    },
    create: function() {
    },
    update: function() {
    },
    render: function() {
    },
    start: function() {
    }
};

var Game_Over = {
    preload: function() {
    },
    create: function() {
    },
    update: function() {
    },
    render: function() {
    },
    onDown: function() {
    }
};
// Add and start the 'main' state to start the game
game.state.add('CountDown', CountDown)
game.state.add('main', mainState);
game.state.add('Menu', Menu);
game.state.add('Game_Over', Game_Over);
game.state.start('main');

我发布这个anwser是为了帮助其他有同样问题的人

基本上我查了一下语法,它有三个参数

在我的代码是:

game.time.events.add(game.rnd.integerInRange(300, 3000), this.launchGreenEnemy);
它需要this参数在端点指向该对象,所以我必须将其放在末尾,如下所示:

game.time.events.add(game.rnd.integerInRange(300, 3000), this.launchGreenEnemy,this);

希望这能帮助其他有同样问题的人,祝大家圣诞快乐

这意味着在代码中的某个地方有类似于
whatever.apply
,而
whatever
未定义的。也就是说,它不是对对象的引用,而不是对任何对象的引用。这就是为什么我如此困惑。。。我认为它在game.events.add方法中的位置,但不确定。我看不到在您的代码中提到的
应用
;它可能在您正在使用的库中,这意味着您正在以库不期望的方式调用某些库API。您应该能够使用该库的非精简版本以及浏览器的调试工具来找出代码中发生这种情况的位置。也许这会有所帮助,因为Phaser代码希望在某些数据结构中的元素上有一个“回调”属性。我对这个代码完全不熟悉,所以我不知道它到底意味着什么。在我的例子中,这不是上下文参数,而是我输入错误导致的事件处理程序。谢谢