大家好我有一个每次玩家触摸屏幕时都会产生子弹的功能。
有没有办法可以限制生成的子弹数量?基本上,如果我很快按下屏幕就会产生很多子弹,但我想将其限制在每秒至少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();
}
}
我真的很感激任何帮助。
答案 0 :(得分:1)
一种选择是存储两个值:
Phaser.Timer.SECOND * 2
)我在上面的示例代码中没有看到您在调用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;
}
希望这会以某种方式帮助你。