Je m'excuse pour la confusion. Pour résoudre le premier problème, valider que la variable `shotLightVisible` est définie avant que `shoot()` et `blink()` soient appelés, ensuite nous allons ajouter une nouvelle variable appelée `isFiring` pour savoir si le joueur est en train de tirer ou non. Dans la fonction `shoot()`, nous allons vérifier si `isFiring` est défini avant de permettre au joueur de tirer, et ensuite, nous allons définir `isFiring` à `true`. Enfin, nous allons définir `isFiring` sur `false` lorsque le joueur relâche le clic de la souris.
Pour le deuxième problème, nous devons appeler `shoot()` une seule fois lorsque le joueur appuie sur le clic de la souris et pas à chaque fois que la fonction `blink()` est appelée. Pour cela, j'ai retiré l'appel à `shoot()` dans la fonction `blink()` et j'ai ajouté une condition pour vérifier si `isFiring` est défini avant de permettre à `shoot()` d'être appelé.
Voici le code corrigé :
```js
var shotLightVisible = false;
var intervalId;
var lastFireTime = 0;
var allowToFire = true;
var fireRate = 1;
var isFiring = false;
function draw() {
//...
}
function shoot() {
var currentTime = Date.now();
var timeSinceLastFire = currentTime - lastFireTime;
if (timeSinceLastFire >= 1000 / fireRate && isFiring) {
shotLightVisible = true;
var aK47sound = new Audio('./sounds/AK-47.mp3');
aK47sound.play();
lastFireTime = currentTime;
setTimeout(function () {
shotLightVisible = false;
}, 100);
}
}
function blink() {
// alterner l'affichage de l'image shotLightImage
if (shotLightVisible) {
shotLightVisible = false;
}
}
canvas.addEventListener("mousedown", function (event) {
if (event.button === 0) {
isFiring = true;
shoot();
intervalId = setInterval(function () {
shoot();
blink();
}, 1000 / fireRate);
}
});
window.addEventListener("mouseup", function (event) {
if (event.button === 0) {
isFiring = false;
clearInterval(intervalId);
shotLightVisible = false;
}
});
```
J'espère que cela vous aide !
JavaScript:
document.addEventListener("mousedown", function () {
let shoot = setInterval(function () {
let AK47sound = new Audio("./sounds/AK-47.mp3");
AK47sound.play();
shotLightVisible = true;
setTimeout(function () {
shotLightVisible = false;
}, 50)
}, 100)
document.addEventListener("mouseup", function () {
clearInterval(shoot);
})
})
Comment ajouter à ce magnifique script de tire automatique au maintient du clique un script de tire simple (1 clique => 1 tire) tout en évitant la possibilité de spammer ?