2016-04-17 5 views
0

Ich erstelle ein Invader-ähnliches Spiel mit Phaser HTML5 Game Engine.Kann die Eigenschaft 'getFirstExists' von undefined nicht lesen

Run in diese Cannot read property 'getFirstExists' of undefined Fehler, wenn ich versuche, den Kollisionstest für das ‚Schiff‘ und die ‚Feinde‘ hinzufügen ...

ich bereits zwei Tage auf sie ausgegeben habe und noch keine Anhaltspunkte. :(

Bitte helfen. Danke.

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(); 
    } 
} 
+0

Ich glaube nicht, dass Sie mehr von Ihrem Code oder Link zu Ihrem Spiel teilen können? Vergleicht man dies mit einem Arbeitsbeispiel aus einem Tutorial, das sehr ähnlich ist, sehe ich nichts falsch mit dem, was Sie gepostet haben. –

+0

Ich sehe auch nichts falsch mit diesem Code, aber Sie könnten versuchen, einen 'Debugger;' als erste Zeile der 'shipCollision()' Funktion zu setzen. Öffnen Sie dann die Entwicklerwerkzeuge Strg + Umschalt + J, um zu sehen, was der Wert von 'this 'an diesem Punkt ist. – BdR

Antwort

0

I Typoskript verwenden, um Spiele in Phaser zu machen. Ich denke, einer von Grunde, dass Phaser Motor Anruf Update-Funktion (Auto-invoke) sein kann, bevor das Objekt Explosion erstellt.

if(this.explosion !+ undefined) 

vor

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

in Ihrer Update-Funktion.