Pour que la balle aille en ligne droite après avoir été tirée, vous pouvez modifier la position de la balle à chaque frame pour qu'elle se déplace dans la direction correspondante plutôt que de suivre le curseur.JavaScript:var bulletPos = 0; var bullet = false; 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 + 45 / 2, player.width, player.height); if (shotLightVisible) { ctx.drawImage(player.shotLightImage, (-player.width) + 65 / 2, (-player.height / 2) - 42, 20, 20); bulletPos = 0; bullet = true; shotLightVisible = false; // désactiver le comportement de suivi du curseur } if (bullet) { ctx.drawImage(player.bulletImg, (-player.width) + 85 / 2, (-player.height / 2) - 42 + bulletPos, 2, 34); bulletPos -= 10; if (bulletPos == -1000) { bullet = false; } } ctx.restore(); }
Après le clique (donc le tire) la balle (player.bulletImg) continue de s'orienter vers la sourie.
Je veux qu'elle aille en ligne droite, comment faire ?
Voici un exemple de code qui montre comment vous pouvez utiliser l'angle de la balle pour déplacer sa position :
```
var bulletPos = { x: 0, y: 0 }; // Démarrer la position de la balle à (0, 0)
var bullet = false;
var bulletSpeed = 10; // Vitesse de la balle
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 + 45 / 2, player.width, player.height);
if (shotLightVisible) {
ctx.drawImage(player.shotLightImage, (-player.width) + 65/2, (-player.height / 2) - 42, 20, 20);
bulletPos = { x: 0, y: 0 }; // réinitialisation de la position de la balle
bullet = true;
shotLightVisible = false;
}
if (bullet) {
// Déplacez la position de la balle dans la direction correspondante à chaque frame
bulletPos.x += Math.cos(angle) * bulletSpeed;
bulletPos.y += Math.sin(angle) * bulletSpeed;
ctx.drawImage(player.bulletImg, bulletPos.x, bulletPos.y, 2, 34);
if (bulletPos.y < -1000) { // Vérifiez si la balle est en haut de l'écran et la réinitialisez
bullet = false;
}
}
ctx.restore();
}
```
J'espère que cela vous aidera à faire bouger la balle en ligne droite après le tir.