JavaScript:
var shotLightVisible = false;
var intervalId;
var allowToFire = true;
var fireRate = 8;
function draw() {
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.fillStyle = "black";
ctx.fillRect(0, 0, canvas.width, canvas.height);
ctx.save();
ctx.translate(player.x, player.y);
ctx.rotate(angle + Math.PI / 2);
ctx.drawImage(player.image, -player.width / 2, -player.height / 2, player.width, player.height);
if (shotLightVisible) {
ctx.drawImage(player.shotLightImage, (-player.width) + 65 / 2, (-player.height / 2) - 20, 20, 20);
}
ctx.restore();
}
function shoot() {
if (allowToFire) {
shotLightVisible = true;
var aK47sound = new Audio('./sounds/AK-47.mp3');
aK47sound.play();
allowToFire = false;
} else {
setInterval(function () {
allowToFire = true;
}, 1000 / fireRate)
}
}
function blink() {
// alterner l'affichage de l'image shotLightImage
if (shotLightVisible) {
shotLightVisible = false;
} else {
shoot();
}
}
canvas.addEventListener("mousedown", function () {
shoot();
intervalId = setInterval(function () {
blink();
}, 1000 / fireRate);
window.addEventListener("mouseup", function () {
clearInterval(intervalId);
shotLightVisible = false;
})
});
Comment éviter que avec ce code, on puisse spammer comme un dingue en limitant la cadence de tire max à (1000/fireRate) coups par secondes ?
Pour limiter le nombre de tirs par seconde, vous devez ajouter une variable pour stocker le temps écoulé depuis le dernier coup de feu, comme ceci :
```js
var lastFireTime = 0;
```
Ensuite, vous pouvez modifier la fonction `shoot()` pour vérifier si le temps écoulé depuis le dernier coup de feu est supérieur ou égal à la cadence de tir souhaitée. Si c'est le cas, vous pouvez tirer et mettre à jour `lastFireTime` pour stocker le moment où le coup de feu a été tiré. Sinon, vous ne devez rien faire.
Voici comment vous pouvez modifier la fonction `shoot()` :
```js
function shoot() {
var currentTime = Date.now();
var timeSinceLastFire = currentTime - lastFireTime;
if (timeSinceLastFire >= 1000 / fireRate) {
shotLightVisible = true;
var aK47sound = new Audio('./sounds/AK-47.mp3');
aK47sound.play();
lastFireTime = currentTime;
}
}
```
Enfin, vous devez remplacer l'appel à la fonction `shoot()` dans la fonction `blink()` par un simple appel à `shoot()`, car `blink()` est appelée tout le temps et cela ne respecterait pas la cadence désirée. Le code final ressemblera à ceci :
```js
var shotLightVisible = false;
var intervalId;
var fireRate = 8;
var lastFireTime = 0;
function draw() {
// ...
}
function shoot() {
var currentTime = Date.now();
var timeSinceLastFire = currentTime - lastFireTime;
if (timeSinceLastFire >= 1000 / fireRate) {
shotLightVisible = true;
var aK47sound = new Audio('./sounds/AK-47.mp3');
aK47sound.play();
lastFireTime = currentTime;
}
}
function blink() {
// alterner l'affichage de l'image shotLightImage
if (shotLightVisible) {
shotLightVisible = false;
} else {
shoot();
}
}
canvas.addEventListener("mousedown", function () {
shoot();
intervalId = setInterval(function () {
blink();
}, 1000 / fireRate);
window.addEventListener("mouseup", function () {
clearInterval(intervalId);
shotLightVisible = false;
})
});
```