2016-03-29 13 views
0

Ben bir oyun var ve bir duvara vurmak arabamı almaya çalışıyorum. Arama yapmayı denedim ve aşağıda göreceğiniz gibi birkaç şey denedim, neden işe yaramayacağımı bilmiyorum. Benim update işlevinde SonraNeden çarpışma algılamam Phaser'da çalışmıyor? Kolaylık olması açısından

create: function() { 
     game.physics.startSystem(Phaser.Physics.ARCADE); 

     this.carSprite = game.add.sprite(game.world.centerX, game.world.centerY, 'car'); 
     game.physics.arcade.enable(this.carSprite); 
    this.timer = game.time.events.loop(300, 
     this.addRoad, this); 
    } 

:

update: function() { 
     game.physics.arcade.overlap(this.carSprite, this.wallSprite, this.scoring, null, this); 
} 

böyle wallSprite oluşturma:

addOneRoadSection: function (x, y) { 
this.scoreCalculator += 1; 
     if (this.scoreCalculator == 10) { 
      this.scoreCalculator = 0; 

      this.wallSprite = game.add.sprite(x + 100, y, 'wall'); 
      game.physics.arcade.enable(this.wallSprite); 
      this.wallAnimation = this.wallSprite .animations.add('wallAnimation'); 
      this.wallSprite.animations.play('wallAnimation', 30, true); 
      this.wallSprite.body.velocity.y = 100; 
      this.wallSprite.checkWorldBounds = true; 
      this.wallSprite.outOfBoundsKill = true; 
     } 
} 

Buradayım

benim create işlevinde kodudur addOneRoadSection'u şu şekilde çağırıyor:

addRoad: function() { 
     this.addOneRoadSection(this.xValue, 0); 
} 

addRoadthis.timer kullanılarak create olarak adlandırılan edilmektedir.

Özetle, bunun ne yaptığı, scoreCalculator on olduğu zaman, bir duvar eklemesidir. Bu iyi çalışıyor, duvar iyi animasyonlu, ancak çarpışma tespiti hiç çalışmıyor.

if bildiriminin içindeki kodu create işlevimin içine taşımayı denedim ve çakışma algılamasıyla iyi çalışıyor (ancak başka şeyler kırılıyor, böylece orayı orada tutamıyorum). Neyi yanlış yapıyorum? this.wallSprite'u her saniyede bir araya geldiğimden beri, this.wallSprite olarak eklenmiş olan yeni sprite tarafından üzerine yazıldığına şüphe duyuyorum ama bunun nasıl yapması gerektiğinden tam olarak emin değilim.

cevap

0

Ben de bunu anladım. Olan şey, benim yeni bir sprite yaratmamı ve diğerinin üzerine yazmamın doğru olduğunu göstermekti. Ben böyle her sprite fizik ekleyebileceğiniz yeni bir wallSpriteaddOneRoadSection eklemek zaman bir dizi olduğunu Şimdi

create: function(){ 
//Create a wallSprite array 
var wallSprite = []; 
} 

:

create yılında: Burada

Sorunu çözüldü nasıl :

addOneRoadSection: function (x, y) { 

      this.wallSprite.push(game.add.sprite(x + 100, y, 'wall')); 
      game.physics.arcade.enable(this.wallSprite[this.wallSprite.length -1]); 
      this.wallAnimation = this.wallSprite[this.wallSprite.length - 1].animations.add('wallAnimation'); 
      this.wallSprite[this.wallSprite.length - 1].animations.play('wallAnimation', 30, true); 
      this.wallSprite[this.wallSprite.length -1].body.velocity.y = 100; 
      this.wallSprite[this.wallSprite.length - 1].checkWorldBounds = true; 
      this.wallSprite[this.wallSprite.length -1].outOfBoundsKill = true; 
} 

Nihayet update içinde ben sadece bunu yapmak gerekir:

for (var i = 0; i < this.wallSprite.length; i++) { 
     game.physics.arcade.overlap(this.car, this.wallSprite, this.scoring, null, this); 
    } 

Voila - her sprite için çarpışma tespiti şimdi çalışıyor.

İlgili konular