2016-07-24 11 views
0

Also verwende ich das Phaser-Framework, um ein Space Invaders Spiel zu erstellen, aber ich habe ein Problem mit und Array von Spielobjekten. Die Array-Gegner sind normal und ich kann console.log (feinds.length) in der Create-Methode gut machen, aber es besagt, dass Gegner nicht definiert sind, wenn ich sie ausführe.Phaser-Array nicht in Update-Methode definiert

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'); 

Antwort

0

Hier DEMO
enemies Array innerhalb mainState.create() so definiert, daher ist es nicht zugänglich für eine andere Funktion innerhalb Objekt mainState
Um den Zugriff Sie müssen Feinde Array als Objektelement definieren

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

Um nun auf Feinde zugreifen zu können, müssen Sie folgende Schritte ausführen:

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