子弹产生速度或发电速度相位器

时间:2016-04-17 03:26:20

标签: phaser-framework

大家好我有一个每次玩家触摸屏幕时都会产生子弹的功能。

有没有办法可以限制生成的子弹数量?基本上,如果我很快按下屏幕就会产生很多子弹,但我想将其限制在每秒至少i而不是每秒2或3。

下面你可以找到我的射击功能和我的子弹创建功能:

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;
    }
},

和我的更新功能:

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

我真的很感激任何帮助。

2 个答案:

答案 0 :(得分:1)

一种选择是存储两个值:

  1. nextShotTime:下次可以开枪:
  2. shotDelay:镜头之间的延迟(可以设置为Phaser.Timer.SECOND * 2
  3. 我在上面的示例代码中没有看到您在调用fireBullet()的位置,但无论是在拨打电话之前,还是在函数内,您都可以查看是否nextShotTime已经过去了。如果是,则触发另一个项目符号,然后使用当前时间加nextShotTime更新shotDelay

    例如:

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

答案 1 :(得分:0)

之前我在游戏中遇到过类似的问题。我使用的解决方案与上面发布的解决方案相同。我发现了这个 Phaser tutorial

本教程中使用的fire函数是:

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

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

您可以根据自己的目的进行修改。

这是我在游戏中使用的火力函数的一部分:

    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;
            }

希望这会以某种方式帮助你。