Robot Question / Réponse (IA) 8

  • Auteur de la discussion ZZZ
  • Date de début
ZZZ
Passionné
Messages
1 400
Fofocoins
7 662
Personnalisation du groupe
Personnalisation pseudo
JavaScript:
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.drawImage(player.image, -player.width / 2, -player.height + 45 / 2, player.width, player.height);
}

En JavaScript, comment faire s'orienter le player.image vers la sourie sans faire s'orienter touts les éléments de ctx ?
 
Fofobot 🤖
Assistant virtuel
Donateur 🤲
Messages
3 016
Fofocoins
70 789
Pour faire en sorte que l'image de `player` s'oriente vers la souris sans affecter tous les éléments de `ctx`, vous pouvez utiliser la fonction `ctx.rotate()` pour effectuer une rotation autour du joueur seulement.

Voici comment vous pouvez modifier votre fonction `draw()` pour mettre en œuvre cette fonctionnalité:

```javascript
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)
// calculer l'angle de rotation
var angle = Math.atan2(mouseY - player.y, mouseX - player.x);
ctx.rotate(angle); // tourner le contexte autour du joueur
ctx.drawImage(player.image, -player.width / 2, -player.height + 45 / 2, player.width, player.height);
ctx.restore(); // restaurer le contexte
}
```

Ici, nous avons ajouté une variable `angle` qui calcule l'angle entre la position de la souris et celle du joueur à l'aide de la fonction `Math.atan2()`. Nous avons ensuite appelé `ctx.rotate()` en passant cet angle, ce qui fait tourner le contexte Canvas autour du joueur. Ensuite, nous dessinons l'image du joueur avec `ctx.drawImage()` et, enfin, nous avons appelé `ctx.restore()` pour revenir à l'état d'origine du contexte.
 
ZZZ
Passionné
Messages
1 400
Fofocoins
7 662
Personnalisation du groupe
Personnalisation pseudo
Pour faire en sorte que l'image de `player` s'oriente vers la souris sans affecter tous les éléments de `ctx`, vous pouvez utiliser la fonction `ctx.rotate()` pour effectuer une rotation autour du joueur seulement.

Voici comment vous pouvez modifier votre fonction `draw()` pour mettre en œuvre cette fonctionnalité:

```javascript
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)
// calculer l'angle de rotation
var angle = Math.atan2(mouseY - player.y, mouseX - player.x);
ctx.rotate(angle); // tourner le contexte autour du joueur
ctx.drawImage(player.image, -player.width / 2, -player.height + 45 / 2, player.width, player.height);
ctx.restore(); // restaurer le contexte
}
```

Ici, nous avons ajouté une variable `angle` qui calcule l'angle entre la position de la souris et celle du joueur à l'aide de la fonction `Math.atan2()`. Nous avons ensuite appelé `ctx.rotate()` en passant cet angle, ce qui fait tourner le contexte Canvas autour du joueur. Ensuite, nous dessinons l'image du joueur avec `ctx.drawImage()` et, enfin, nous avons appelé `ctx.restore()` pour revenir à l'état d'origine du contexte.
JavaScript:
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);  // NON !!!
    ctx.drawImage(player.image, -player.width / 2, -player.height + 45 / 2, player.width, player.height);
    ctx.restore();
}

comment faire en sorte que player.image s'oriente vers le pointer de souris sans utiliser cts.rotate !!
 
Fofobot 🤖
Assistant virtuel
Donateur 🤲
Messages
3 016
Fofocoins
70 789
JavaScript:
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);  // NON !!!
    ctx.drawImage(player.image, -player.width / 2, -player.height + 45 / 2, player.width, player.height);
    ctx.restore();
}

comment faire en sorte que player.image s'oriente vers le pointer de souris sans utiliser cts.rotate !!
Je peux vous proposer une autre solution sans utiliser `ctx.rotate()` pour faire pivoter l'image du joueur vers la souris.

Nous allons utiliser les fonctions `ctx.setTransform()` et `ctx.drawImage()` pour modifier la transformation du contexte Canvas afin d'orienter l'image du joueur vers la souris.

Voici le code pour cela :

```javascript
function draw() {
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.fillStyle = "black";
ctx.fillRect(0, 0, canvas.width, canvas.height);
const dx = mouseX - player.x;
const dy = mouseY - player.y;
const angle = Math.atan2(dy, dx);
ctx.save();
ctx.translate(player.x, player.y);
ctx.setTransform(Math.cos(angle), Math.sin(angle), -Math.sin(angle), Math.cos(angle), 0, 0);
ctx.drawImage(player.image, -player.width / 2, -player.height + 45 / 2, player.width, player.height);
ctx.restore();
}
```

Ici, nous avons calculé l'angle entre la position de la souris et celle du joueur à l'aide de la fonction `Math.atan2()`. Nous avons ensuite utilisé `ctx.setTransform()` pour définir la nouvelle transformation du contexte Canvas. Les valeurs `Math.cos(angle)` et `Math.sin(angle)` sont utilisées pour définir la rotation, et les valeurs `-Math.sin(angle)` et `Math.cos(angle)` sont utilisées pour la mise à l'échelle. Enfin, nous dessinons l'image du joueur avec `ctx.drawImage()`, comme précédemment.

Notez que, si vous souhaitez faire pivoter d'autres éléments Canvas en même temps que le joueur, il peut être préférable d'utiliser `ctx.rotate()` pour les faire pivoter avec l'ensemble du contexte Canvas.
 
ZZZ
Passionné
Messages
1 400
Fofocoins
7 662
Personnalisation du groupe
Personnalisation pseudo
Pour faire en sorte que l'image de `player` s'oriente vers la souris sans affecter tous les éléments de `ctx`, vous pouvez utiliser la fonction `ctx.rotate()` pour effectuer une rotation autour du joueur seulement.

Voici comment vous pouvez modifier votre fonction `draw()` pour mettre en œuvre cette fonctionnalité:

```javascript
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)
// calculer l'angle de rotation
var angle = Math.atan2(mouseY - player.y, mouseX - player.x);
ctx.rotate(angle); // tourner le contexte autour du joueur
ctx.drawImage(player.image, -player.width / 2, -player.height + 45 / 2, player.width, player.height);
ctx.restore(); // restaurer le contexte
}
```

Ici, nous avons ajouté une variable `angle` qui calcule l'angle entre la position de la souris et celle du joueur à l'aide de la fonction `Math.atan2()`. Nous avons ensuite appelé `ctx.rotate()` en passant cet angle, ce qui fait tourner le contexte Canvas autour du joueur. Ensuite, nous dessinons l'image du joueur avec `ctx.drawImage()` et, enfin, nous avons appelé `ctx.restore()` pour revenir à l'état d'origine du contexte.
JavaScript:
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);  // NON !!!
    ctx.drawImage(player.image, -player.width / 2, -player.height + 45 / 2, player.width, player.height);
    ctx.restore();
}

Comment ne faire tourner que player.image vers la souris ET PAS LES AUTRES ELEMENTS DE CTX !!
 
Fofobot 🤖
Assistant virtuel
Donateur 🤲
Messages
3 016
Fofocoins
70 789
JavaScript:
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);  // NON !!!
    ctx.drawImage(player.image, -player.width / 2, -player.height + 45 / 2, player.width, player.height);
    ctx.restore();
}

Comment ne faire tourner que player.image vers la souris ET PAS LES AUTRES ELEMENTS DE CTX !!
Pour faire en sorte que l'image de `player` s'oriente vers la souris sans affecter tous les éléments de `ctx`, vous pouvez utiliser la fonction `ctx.rotate()` pour effectuer une rotation autour du joueur seulement.

Voici comment vous pouvez modifier votre fonction `draw()` pour mettre en œuvre cette fonctionnalité:

```javascript
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)
// calculer l'angle de rotation
var angle = Math.atan2(mouseY - player.y, mouseX - player.x);
ctx.rotate(angle); // tourner le contexte autour du joueur
ctx.drawImage(player.image, -player.width / 2, -player.height + 45 / 2, player.width, player.height);
ctx.restore(); // restaurer le contexte
}
```

Ici, nous avons ajouté une variable `angle` qui calcule l'angle entre la position de la souris et celle du joueur à l'aide de la fonction `Math.atan2()`. Nous avons ensuite appelé `ctx.rotate()` en passant cet angle, ce qui fait tourner le contexte Canvas autour du joueur. Ensuite, nous dessinons l'image du joueur avec `ctx.drawImage()` et, enfin, nous avons appelé `ctx.restore()` pour revenir à l'état d'origine du contexte.
 
ZZZ
Passionné
Messages
1 400
Fofocoins
7 662
Personnalisation du groupe
Personnalisation pseudo
Pour faire en sorte que l'image de `player` s'oriente vers la souris sans affecter tous les éléments de `ctx`, vous pouvez utiliser la fonction `ctx.rotate()` pour effectuer une rotation autour du joueur seulement.

Voici comment vous pouvez modifier votre fonction `draw()` pour mettre en œuvre cette fonctionnalité:

```javascript
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)
// calculer l'angle de rotation
var angle = Math.atan2(mouseY - player.y, mouseX - player.x);
ctx.rotate(angle); // tourner le contexte autour du joueur
ctx.drawImage(player.image, -player.width / 2, -player.height + 45 / 2, player.width, player.height);
ctx.restore(); // restaurer le contexte
}
```

Ici, nous avons ajouté une variable `angle` qui calcule l'angle entre la position de la souris et celle du joueur à l'aide de la fonction `Math.atan2()`. Nous avons ensuite appelé `ctx.rotate()` en passant cet angle, ce qui fait tourner le contexte Canvas autour du joueur. Ensuite, nous dessinons l'image du joueur avec `ctx.drawImage()` et, enfin, nous avons appelé `ctx.restore()` pour revenir à l'état d'origine du contexte.
au contraire... ctx.rotate va affecter l'orientation de tous les éléments de ctx. Je veux qu'il n'y ai que player.image qui soit affecté !!
 
Fofobot 🤖
Assistant virtuel
Donateur 🤲
Messages
3 016
Fofocoins
70 789
au contraire... ctx.rotate va affecter l'orientation de tous les éléments de ctx. Je veux qu'il n'y ai que player.image qui soit affecté !!
Je comprends mieux maintenant votre demande. Pour faire pivoter uniquement l'image du joueur et non les autres éléments du contexte, vous pouvez utiliser l'approche suivante :

```javascript
function draw() {
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.fillStyle = "black";
ctx.fillRect(0, 0, canvas.width, canvas.height);

// Calcul de l'angle entre le joueur et la souris
const dx = mouseX - player.x;
const dy = mouseY - player.y;
const angle = Math.atan2(dy, dx);

// Sauvegarde de la matrice de transformation en cours dans le contexte
ctx.save();

// Translation du contexte pour placer le joueur au bon endroit
ctx.translate(player.x, player.y);

// Rotation du contexte autour du centre du joueur
ctx.rotate(angle);

// Dessin de l'image du joueur en l'alignant sur l'axe Y, afin qu'elle pointe vers la souris
ctx.drawImage(player.image, -player.width / 2, -player.height / 2, player.width, player.height);

// Restauration de la matrice de transformation d'origine du contexte
ctx.restore();
}
```

Dans cet exemple, nous calculons d'abord l'angle entre le joueur et la souris à l'aide de la fonction `Math.atan2()`. Ensuite, nous sauvegardons la matrice de transformation actuelle du contexte avec `ctx.save()`. Nous effectuons ensuite une translation pour placer le joueur au bon endroit et une rotation autour de son centre, avec `ctx.translate()` et `ctx.rotate()`. Enfin, nous dessinons l'image du joueur en alignant son centre sur l'origine, qui correspond maintenant au centre de rotation, et non plus au coin supérieur gauche, avec `ctx.drawImage()`. Enfin, nous restaurons la matrice de transformation initiale du contexte avec `ctx.restore()`.
 
ZZZ
Passionné
Messages
1 400
Fofocoins
7 662
Personnalisation du groupe
Personnalisation pseudo
Je comprends mieux maintenant votre demande. Pour faire pivoter uniquement l'image du joueur et non les autres éléments du contexte, vous pouvez utiliser l'approche suivante :

```javascript
function draw() {
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.fillStyle = "black";
ctx.fillRect(0, 0, canvas.width, canvas.height);

// Calcul de l'angle entre le joueur et la souris
const dx = mouseX - player.x;
const dy = mouseY - player.y;
const angle = Math.atan2(dy, dx);

// Sauvegarde de la matrice de transformation en cours dans le contexte
ctx.save();

// Translation du contexte pour placer le joueur au bon endroit
ctx.translate(player.x, player.y);

// Rotation du contexte autour du centre du joueur
ctx.rotate(angle);

// Dessin de l'image du joueur en l'alignant sur l'axe Y, afin qu'elle pointe vers la souris
ctx.drawImage(player.image, -player.width / 2, -player.height / 2, player.width, player.height);

// Restauration de la matrice de transformation d'origine du contexte
ctx.restore();
}
```

Dans cet exemple, nous calculons d'abord l'angle entre le joueur et la souris à l'aide de la fonction `Math.atan2()`. Ensuite, nous sauvegardons la matrice de transformation actuelle du contexte avec `ctx.save()`. Nous effectuons ensuite une translation pour placer le joueur au bon endroit et une rotation autour de son centre, avec `ctx.translate()` et `ctx.rotate()`. Enfin, nous dessinons l'image du joueur en alignant son centre sur l'origine, qui correspond maintenant au centre de rotation, et non plus au coin supérieur gauche, avec `ctx.drawImage()`. Enfin, nous restaurons la matrice de transformation initiale du contexte avec `ctx.restore()`.
çela affecte toujours la rotation de tous les éléments de ctx
 
Fofobot 🤖
Assistant virtuel
Donateur 🤲
Messages
3 016
Fofocoins
70 789
çela affecte toujours la rotation de tous les éléments de ctx
Désolé pour la confusion. Pour faire pivoter uniquement l'image du joueur sans affecter les autres éléments du contexte, vous pouvez utiliser la méthode de la transformation inverse.

Cela consiste à enregistrer la matrice de transformation actuelle du contexte, puis à inverser la transformation, à dessiner l'image du joueur avec la nouvelle transformation inversée et à rétablir la matrice de transformation du contexte.

Voici le code mis à jour qui devrait fonctionner en utilisant cette méthode :

```javascript
function draw() {
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.fillStyle = "black";
ctx.fillRect(0, 0, canvas.width, canvas.height);

// Sauvegar
 
ZZZ
Passionné
Messages
1 400
Fofocoins
7 662
Personnalisation du groupe
Personnalisation pseudo
Désolé pour la confusion. Pour faire pivoter uniquement l'image du joueur sans affecter les autres éléments du contexte, vous pouvez utiliser la méthode de la transformation inverse.

Cela consiste à enregistrer la matrice de transformation actuelle du contexte, puis à inverser la transformation, à dessiner l'image du joueur avec la nouvelle transformation inversée et à rétablir la matrice de transformation du contexte.

Voici le code mis à jour qui devrait fonctionner en utilisant cette méthode :

```javascript
function draw() {
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.fillStyle = "black";
ctx.fillRect(0, 0, canvas.width, canvas.height);

// Sauvegar
le code mis à jour est imcomplet
 
Fofobot 🤖
Assistant virtuel
Donateur 🤲
Messages
3 016
Fofocoins
70 789
le code mis à jour est imcomplet
Veuillez excuser mon erreur, voici le code complet avec la méthode de transformation inverse pour faire tourner uniquement le joueur vers la souris :

```javascript
function draw() {
// Effacer le contexte
ctx.clearRect(0, 0, canvas.width, canvas.height);

// Dessiner le fond
ctx.fillStyle = "black";
ctx.fillRect(0, 0, canvas.width, canvas.height);

// Sauvegarder la matrice de transformation actuelle du contexte
ctx.save();

// Translation du contexte au centre du joueur
ctx.translate(player.x, player.y);

// Calcul de l'angle entre le joueur et la souris
const dx = mouseX - player.x;
const dy = mouseY - player.y;
const angle = Math.atan2(dy, dx);

// Transformation inverse pour faire pivoter uniquement l'image du joueur
ctx.transform(Math.cos(-angle), Math.sin(-angle), -Math.sin(-angle), Math.cos(-angle), 0, 0);

 
ZZZ
Passionné
Messages
1 400
Fofocoins
7 662
Personnalisation du groupe
Personnalisation pseudo
Veuillez excuser mon erreur, voici le code complet avec la méthode de transformation inverse pour faire tourner uniquement le joueur vers la souris :

```javascript
function draw() {
// Effacer le contexte
ctx.clearRect(0, 0, canvas.width, canvas.height);

// Dessiner le fond
ctx.fillStyle = "black";
ctx.fillRect(0, 0, canvas.width, canvas.height);

// Sauvegarder la matrice de transformation actuelle du contexte
ctx.save();

// Translation du contexte au centre du joueur
ctx.translate(player.x, player.y);

// Calcul de l'angle entre le joueur et la souris
const dx = mouseX - player.x;
const dy = mouseY - player.y;
const angle = Math.atan2(dy, dx);

// Transformation inverse pour faire pivoter uniquement l'image du joueur
ctx.transform(Math.cos(-angle), Math.sin(-angle), -Math.sin(-angle), Math.cos(-angle), 0, 0);
Code:
var canvas = document.getElementById('screen1');
var ctx = canvas.getContext('2d');

canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
canvas.width = document.body.clientWidth;
canvas.height = document.body.clientHeight;

var keys = {};
var mouse = {
    x: 0,
    y: 0
};
var angle = 0;

window.addEventListener('mousemove', function (event) {
    mouse.x = event.clientX;
    mouse.y = event.clientY;
});

window.addEventListener('keydown', function (event) {
    keys[event.keyCode] = true;
});

window.addEventListener('keyup', function (event) {
    delete keys[event.keyCode];
});

var player = {
    x: (canvas.width / 2),
    y: (canvas.height / 2),
    width: 41,
    height: 97,
    speed: 3,
    speedDiag: 3 / Math.sqrt(2),
};

player.image = new Image();
player.image.src = "./img/cursor.png";
player.image.onload = function () {
    loop();
};

player.shotLightImage = new Image();
player.shotLightImage.src = "./img/shotLight Img.png";
player.shotLightImage.onload = function () {
    loop();
}

player.bulletImg = new Image();
player.bulletImg.src = "./img/bullet Img.png";
player.bulletImg.onload = function () {
    loop();
}

function updateAngle() {
    var dx = mouse.x - player.x;
    var dy = mouse.y - player.y;
    angle = Math.atan2(dy, dx);
}

function update() {
    if (keys[38] && !keys[37] && !keys[39]) {
        player.y -= player.speed;
    }
    if (keys[40] && !keys[37] && !keys[39]) {
        player.y += player.speed;
    }
    if (keys[37] && !keys[38] && !keys[40]) {
        player.x -= player.speed;
    }
    if (keys[39] && !keys[38] && !keys[40]) {
        player.x += player.speed;
    }
    if (keys[38] && keys[37]) {
        player.y -= player.speedDiag;
        player.x -= player.speedDiag;
    }
    if (keys[38] && keys[39]) {
        player.y -= player.speedDiag;
        player.x += player.speedDiag;
    }
    if (keys[40] && keys[37]) {
        player.y += player.speedDiag;
        player.x -= player.speedDiag;
    }
    if (keys[40] && keys[39]) {
        player.y += player.speedDiag;
        player.x += player.speedDiag;
    }
    updateAngle();
}

var shotLightVisible = false;
var lastFireTime = 0;
var fireRate = 60;
var shootIntervalId;
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;
    }

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

document.addEventListener("mousedown", function () {
    var currentTime = Date.now();
    var timeSinceLastFire = currentTime - lastFireTime;
    if (timeSinceLastFire >= fireRate) {
        // tirer
        var AK47sound = new Audio("./sounds/AK-47.mp3");
        AK47sound.play();
        shotLightVisible = true;
        setTimeout(function () {
            shotLightVisible = false;
        }, 50);

        lastFireTime = currentTime;
    }
    clearInterval(shootIntervalId);
    shootIntervalId = setInterval(function () {
        var currentTime = Date.now();
        var timeSinceLastFire = currentTime - lastFireTime;
        if (timeSinceLastFire >= fireRate) {
            // tirer
            var AK47sound = new Audio("./sounds/AK-47.mp3");
            AK47sound.play();
            shotLightVisible = true;
            setTimeout(function () {
                shotLightVisible = false;
            }, 50);
            lastFireTime = currentTime;
        }
    }, fireRate);
});

document.addEventListener("mouseup", function () {
    clearInterval(shootIntervalId);
});

function loop() {
    update();
    draw();
    requestAnimationFrame(loop);
}

Après le tire, la balle (player.bulletImg) suit le curseur, fait qu'elle avance en ligne droite.
 
Fofobot 🤖
Assistant virtuel
Donateur 🤲
Messages
3 016
Fofocoins
70 789
Code:
var canvas = document.getElementById('screen1');
var ctx = canvas.getContext('2d');

canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
canvas.width = document.body.clientWidth;
canvas.height = document.body.clientHeight;

var keys = {};
var mouse = {
    x: 0,
    y: 0
};
var angle = 0;

window.addEventListener('mousemove', function (event) {
    mouse.x = event.clientX;
    mouse.y = event.clientY;
});

window.addEventListener('keydown', function (event) {
    keys[event.keyCode] = true;
});

window.addEventListener('keyup', function (event) {
    delete keys[event.keyCode];
});

var player = {
    x: (canvas.width / 2),
    y: (canvas.height / 2),
    width: 41,
    height: 97,
    speed: 3,
    speedDiag: 3 / Math.sqrt(2),
};

player.image = new Image();
player.image.src = "./img/cursor.png";
player.image.onload = function () {
    loop();
};

player.shotLightImage = new Image();
player.shotLightImage.src = "./img/shotLight Img.png";
player.shotLightImage.onload = function () {
    loop();
}

player.bulletImg = new Image();
player.bulletImg.src = "./img/bullet Img.png";
player.bulletImg.onload = function () {
    loop();
}

function updateAngle() {
    var dx = mouse.x - player.x;
    var dy = mouse.y - player.y;
    angle = Math.atan2(dy, dx);
}

function update() {
    if (keys[38] && !keys[37] && !keys[39]) {
        player.y -= player.speed;
    }
    if (keys[40] && !keys[37] && !keys[39]) {
        player.y += player.speed;
    }
    if (keys[37] && !keys[38] && !keys[40]) {
        player.x -= player.speed;
    }
    if (keys[39] && !keys[38] && !keys[40]) {
        player.x += player.speed;
    }
    if (keys[38] && keys[37]) {
        player.y -= player.speedDiag;
        player.x -= player.speedDiag;
    }
    if (keys[38] && keys[39]) {
        player.y -= player.speedDiag;
        player.x += player.speedDiag;
    }
    if (keys[40] && keys[37]) {
        player.y += player.speedDiag;
        player.x -= player.speedDiag;
    }
    if (keys[40] && keys[39]) {
        player.y += player.speedDiag;
        player.x += player.speedDiag;
    }
    updateAngle();
}

var shotLightVisible = false;
var lastFireTime = 0;
var fireRate = 60;
var shootIntervalId;
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;
    }

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

document.addEventListener("mousedown", function () {
    var currentTime = Date.now();
    var timeSinceLastFire = currentTime - lastFireTime;
    if (timeSinceLastFire >= fireRate) {
        // tirer
        var AK47sound = new Audio("./sounds/AK-47.mp3");
        AK47sound.play();
        shotLightVisible = true;
        setTimeout(function () {
            shotLightVisible = false;
        }, 50);

        lastFireTime = currentTime;
    }
    clearInterval(shootIntervalId);
    shootIntervalId = setInterval(function () {
        var currentTime = Date.now();
        var timeSinceLastFire = currentTime - lastFireTime;
        if (timeSinceLastFire >= fireRate) {
            // tirer
            var AK47sound = new Audio("./sounds/AK-47.mp3");
            AK47sound.play();
            shotLightVisible = true;
            setTimeout(function () {
                shotLightVisible = false;
            }, 50);
            lastFireTime = currentTime;
        }
    }, fireRate);
});

document.addEventListener("mouseup", function () {
    clearInterval(shootIntervalId);
});

function loop() {
    update();
    draw();
    requestAnimationFrame(loop);
}

Après le tire, la balle (player.bulletImg) suit le curseur, fait qu'elle avance en ligne droite.
Sorry I couldn't contact the ChatGPT think tank :(
 

🚫 Alerte AdBlock !

Vous avez activé le mode Ninja, et il cache toutes les pubs ! 😆 Un petit coup de pouce pour notre site serait super apprécié si vous pouvez le désactiver. 🙏

🦸‍♂️ J'ai Désactivé AdBlock !