Phaser数组未在update方法中定义

时间:2016-07-24 04:43:17

标签: javascript phaser-framework

所以我使用Phaser框架创建了一个太空入侵者游戏,但我对游戏对象有一个问题。阵列敌人是正常的,我可以在create方法中做console.log(enemies.length),但它说我运行它时没有定义敌人。

 var game = new Phaser.Game(800, 600);
    var bgTile;
    var speed = 200;
var dropCnt = 100;

var box = function(options) {
    var bmd = game.add.bitmapData(options.length, options.width);
    bmd.ctx.beginPath();
    bmd.ctx.rect(0, 0, options.length, options.width);
    bmd.ctx.fillStyle = options.color;
    bmd.ctx.fill();
    return bmd;
};

var mainState = {
  preload: function(){
    //var music;
    //game.load.audio('sound1',['track01.mp3','track01.ogg']); // need to make this spce music
    game.load.image('bgTile', 'bgtile.jpg');
  },

  create: function(){
    lives = 3;
    //music = game.add.audio('sound1');
    //music.loopFull(1);
    this.cursor = game.input.keyboard.createCursorKeys();
    game.physics.startSystem(Phaser.Physics.ARCADE);
    game.world.enableBody = true;
    BGTile = starfield = game.add.tileSprite(0, 0, 800, 600, 'bgTile');
    game.physics.startSystem(Phaser.Physics.ARCADE);
    this.player = game.add.sprite(384, 550, box({
            length: 32,
            width: 32,
            color: '#FFFFFF'
        }));
        this.enemy = game.add.group();
        this.enemy.enableBody = true;
        var enemies= [];
        for(var i = 0; i < 8; i++){
          for(var j = 0; j < 8; j++){
            enemies.push(this.enemy.create(i*75+100,j*30+20, box({
              length: 32,
              width: 16,
              color: '#FF0000'
            })));

          }
        }

        var bullets= [];
        this.bullet = game.add.group();
        this.bullet.enableBody = true;
        this.player.body.immovable = true;
    this.enemy.body.immovable = true;
  },

  update: function(){
    console.log(enemies.length);
    starfield.tilePosition.y += 2;
    this.player.body.velocity.y = 0;
        this.player.body.velocity.x = 0;
    if (this.cursor.left.isDown) {
              this.player.body.velocity.x -= speed;
          } else if (this.cursor.right.isDown) {
              this.player.body.velocity.x += speed;
          }
    dropCnt--;

    if(dropCnt === 0){
      dropCnt = 100;
      for(var i = 0; i < enemies.length;i++){
        this.enemies.body.x -= 8;
        console.log("test");
      }
    }
  }
};

game.state.add('main', mainState);
game.state.start('main');

1 个答案:

答案 0 :(得分:0)

这里DEMO
enemies数组在mainState.create()内定义,因此对象mainState内的其他函数无法访问它 要访问,您必须将enemies数组定义为对象成员

var mainState = {
  enemies:[],
  ....
  ...
}

所以现在要访问你必须做的敌人

mainState.enemies.push(....)
mainState.enemies.pop()