2016-04-17 9 views
0

Hallo all ich habe eine Funktion, die Kugeln jedes Mal generiert, wenn der Spieler den Bildschirm berührt.Bullet Spawn Geschwindigkeit oder Generation Geschwindigkeit Phaser

Gibt es eine Möglichkeit, die Anzahl der erzeugten Kugeln zu begrenzen? Grundsätzlich, wenn ich den Bildschirm sehr schnell drücke, werden viele Kugeln erzeugt, aber ich möchte sie auf mindestens i pro Sekunde statt 2 oder 3 pro Sekunde beschränken.

createBullets: function(){ 
    //Bullets 
    this.bullets = this.add.group(); 
    this.bullets.enableBody = true; 
    this.bullets.physicsBodyType = Phaser.Physics.P2JS; 
    this.bullets.createMultiple(500, 'bullet', 0, false); 
    this.bullets.setAll('anchor.x', 0.5); 
    this.bullets.setAll('anchor.y', 0.5); 
    this.bullets.setAll('outOfBoundsKill', true); 
    this.bullets.setAll('checkWorldBounds', true);  

}, 

fireBullet: function(){ 
    this.bullet = this.bullets.getFirstExists(false); 
    if (this.bullet) { 
     this.bullet.reset(this.tanque.x, this.tanque.y - 20); 
     this.bullet.body.velocity.y = -500; 
    } 
}, 

und meine Update-Funktion:

if(this.input.activePointer.isDown){ 
    if (!this.mouseTouchDown) { 
     this.touchDown(); 
    } 
}else { 
    if (this.mouseTouchDown) { 
     this.touchUp(); 
    } 
} 

Jede Hilfe würde ich wirklich zu schätzen

Unten können Sie meine Brennfunktion und meine Kugel Erstellungsfunktion finden.

Antwort

0

ich vor ähnliche Probleme in den Spielen gehabt haben. Die Lösung, die ich verwendet habe, ist die gleiche wie oben beschrieben. Ich habe es in diesem Phaser tutorial gefunden.

Die Feuer-Funktion im Tutorial verwendet wird:

fire: function() { 
if (this.nextShotAt > this.time.now) { 
    return; 
} 

this.nextShotAt = this.time.now + this.shotDelay; 

Sie es ändern können Ihre Zwecke anpassen.

Dies ist Teil eines Feuers Funktion ich in einem Spiel habe ich gemacht:

fire: function() { 
    //Make sure the player can't shoot when dead and that they are able to shoot another bullet 
     if(!this.player.alive || this.time.now < this.nextFireTime) { 
      return; 
     } 

     this.nextFireTime = this.time.now + this.fireRate; 

     var bullet; 
      //If weaponlvl = 0, shoot a normal bullet 
      if(this.weaponlvl === 0) { 
       if(this.bullet1.countDead() === 0) { 
        return; 
       } 
       //Properties for the basic weapon 
       this.fireRate = 500; 
       bullet = this.bullet1.getFirstExists(false); 
       bullet.reset(this.player.x, this.player.y-22); 
       bullet.body.velocity.y = -300; 
      } 

Hope this Sie in irgendeiner Weise hilft.

1

Eine Möglichkeit ist, zwei Werte zu speichern:

  1. nextShotTime: ein Schuss beim nächsten Mal kann
  2. shotDelay abgefeuert werden: Verzögerung zwischen den Aufnahmen

I don (kann wie Phaser.Timer.SECOND * 2 eingestellt werden) In Ihrem obigen Beispielcode sehen Sie nicht, wo Sie anrufen fireBullet(), aber entweder bevor Sie den Anruf tätigen, oder innerhalb der Funktion, könnten Sie dann überprüfen, ob der nextShotTime in der Vergangenheit ist. Wenn dies der Fall ist, feuern Sie ein anderes Geschoss ab und aktualisieren Sie dann die mit der aktuellen Uhrzeit plus der shotDelay.

Zum Beispiel:

if (this.nextShotTime < this.time.now) { 
    this.nextShotTime = this.time.now + this.shotDelay; 
    // add your code that will fire a bullet. 
}