Problème simple en javascript qui pour m'aider ?

Salut-les-khey3
2022-01-07 22:49:50

ça fait 30 min que je planche la

J'ai détecter le pb mais je n'arrive pas à comprendre, voici le code

window.onload = function() {

var canvas;
var canvasWidth = 900;
var canvaHeight = 600;
var blockSize = 30;
var ctx;
var delay = 1000;
var snakee;

init();

function init() {

canvas = document.createElement('canvas');
canvas.width = canvasWidth;
canvas.height = canvaHeight;
canvas.style.border = "5px solid";
document.body.appendChild(canvas);
ctx = canvas.getContext('2d');
ctx.fillStyle = "#ff0000";
snakee = new snake([[6,4],[5,4],[4,4]]);
snakee.draw();

// refreshCanvas();

// function refreshCanvas(){

// ctx.clearRect(0,0,canvas.width,canvas.height);
// setTimeout(refreshCanvas,delay);

// }

function drawBlock(ctx, position){

var x = position[0] * blockSize;
var y = position[1] * blockSize;
ctx.fillRect(x, y, blockSize, blockSize);
}

function snake(body){

this.body = body;
this.draw = function(ctx){
ctx.fillStyle = "#ff0000";
for(var i = 0; i < this.body.lenght; i++) {
drawBlock(ctx, this.body[i]);
}
ctx.restore();
};
}
}
}

En fait les méthode save() et restore() de ma variable ctx ne sont pas accessible lorsque j'instancie un Object de type snake

Salut-les-khey3
2022-01-07 22:51:40

Me semblais pourtant que quand une variable était déclarer assigner dans une scope, elles restais accéssible dans les scope enfants :(

Salut-les-khey3
2022-01-07 22:58:43

un exemple plus parlant, accessible dans la fonction init ou elle est affectéhttps://image.noelshack.com/fichiers/2022/01/5/1641592679-sans-titre.jpg

Pas accessible lors de l'instanciation du snakehttps://image.noelshack.com/fichiers/2022/01/5/1641592720-sans-titre2.jpg

Salut-les-khey3
2022-01-07 22:59:45

A l'aide

Zadakiel
2022-01-07 23:03:30

Le 07 janvier 2022 à 22:58:43 :
un exemple plus parlant, accessible dans la fonction init ou elle est affectéhttps://image.noelshack.com/fichiers/2022/01/5/1641592679-sans-titre.jpg

Pas accessible lors de l'instanciation du snakehttps://image.noelshack.com/fichiers/2022/01/5/1641592720-sans-titre2.jpg

Enlève le paramètre ctx de ta fonction draw.

amongnous
2022-01-07 23:07:37

tente peut etre un this.restore = iRestore dans la dernière fonction
et appelle ctx.iRestore dans ta sous fonction

Whinot2
2022-01-07 23:08:31

Tant que t'as pas assigné ctx, le language sait pas de quel type est ton objet ( vu que tu mets var ), donc l'auto complétion peut pas te proposer quelque chose

Salut-les-khey3
2022-01-07 23:08:54

Le 07 janvier 2022 à 23:03:30 :

Le 07 janvier 2022 à 22:58:43 :
un exemple plus parlant, accessible dans la fonction init ou elle est affectéhttps://image.noelshack.com/fichiers/2022/01/5/1641592679-sans-titre.jpg

Pas accessible lors de l'instanciation du snakehttps://image.noelshack.com/fichiers/2022/01/5/1641592720-sans-titre2.jpg

Enlève le paramètre ctx de ta fonction draw.

Bien vue c'était pas dans le code du gars que je copie mais, j'ai toujours pas accès à ces deux méthodes

Whinot2
2022-01-07 23:10:18

J'ai rien dit, j'ai mal lu les parenthèses, dans ce cas c'est sûrement ce qu'a dit le khey au dessus, comme t'as ctx en paramètre de draw, ça rend confus l'application par rapport à ton attribut ctx

Zadakiel
2022-01-07 23:12:47

Ce que tu dis est presque bon aussi vdd, l'éditeur reconnait directement le ctx du début du programme mais pas celui en paramètre de la fonction draw.

Salut-les-khey3
2022-01-07 23:13:11

Le 07 janvier 2022 à 23:10:18 :
J'ai rien dit, j'ai mal lu les parenthèses, dans ce cas c'est sûrement ce qu'a dit le khey au dessus, comme t'as ctx en paramètre de draw, ça rend confus l'application par rapport à ton attribut ctx

Effectvement j'ai accès aux méthode en utilisant mais le gars que je suis le nomme directement ctx

Whinot2
2022-01-07 23:15:18

Je connais pas la syntaxe JavaScript car je suis spé Java perso, mais this.draw = function(ctx){} ça correspond à quoi ?

Zadakiel
2022-01-07 23:16:27

C'est pour qu'un objet instancié par la fonction snake ait une méthode draw. C'est l'ancienne méthode, lorsque l'on avait pas encore les classes.

amongnous
2022-01-07 23:18:05

attend tu dois s faire snake(ctx, ..) sur la fonction sinn c chelou

après ouai ton draw il est pas reconnu non ?

est ce que dans ta fonction snake tu peux appeler save ? avant la sous fonction de dessin

Salut-les-khey3
2022-01-07 23:19:52

Le 07 janvier 2022 à 23:15:18 :
Je connais pas la syntaxe JavaScript car je suis spé Java perso, mais this.draw = function(ctx){} ça correspond à quoi ?

le ctx dans cette fonction était une erreurs

Whinot2
2022-01-07 23:20:23

Le 07 janvier 2022 à 23:16:27 :
C'est pour qu'un objet instancié par la fonction snake ait une méthode draw. C'est l'ancienne méthode, lorsque l'on avait pas encore les classes.

Mais vu qu'il remet le ctx en paramètre de function() il perd encore la notion du type de ctx d'où le fait qu'il ait pas d'auto complétion non?

Zadakiel
2022-01-07 23:21:13

Le 07 janvier 2022 à 23:20:23 :

Le 07 janvier 2022 à 23:16:27 :
C'est pour qu'un objet instancié par la fonction snake ait une méthode draw. C'est l'ancienne méthode, lorsque l'on avait pas encore les classes.

Mais vu qu'il remet le ctx en paramètre de function() il perd encore la notion du type de ctx d'où le fait qu'il ait pas d'auto complétion non?

Ah, j'avais pas vu que la question portait là dessus.
Oui, c'est ça.

Whinot2
2022-01-07 23:21:16

Le 07 janvier 2022 à 23:18:05 :
attend tu dois s faire snake(ctx, ..) sur la fonction sinn c chelou

après ouai ton draw il est pas reconnu non ?

est ce que dans ta fonction snake tu peux appeler save ? avant la sous fonction de dessin

Donc t'as retiré les 2 ctx paramètres et c'est bon ?

Salut-les-khey3
2022-01-07 23:21:50

Le 07 janvier 2022 à 23:18:05 :
attend tu dois s faire snake(ctx, ..) sur la fonction sinn c chelou

après ouai ton draw il est pas reconnu non ?

est ce que dans ta fonction snake tu peux appeler save ? avant la sous fonction de dessin

Non en fait il ne la reconnais pas il me met local variables, mais pourtant le snake est instancié dans la function ou j'affect ctx

Zadakiel
2022-01-07 23:25:00


window.onload = function() {

var canvas;
var canvasWidth = 900;
var canvaHeight = 600;
var blockSize = 30;
var ctx;
var delay = 1000;
var snakee;

init();

function init() {

canvas = document.createElement('canvas');
canvas.width = canvasWidth;
canvas.height = canvaHeight;
canvas.style.border = "5px solid";
document.body.appendChild(canvas);
ctx = canvas.getContext('2d');
ctx.fillStyle = "#ff0000";
snakee = new snake([[6,4],[5,4],[4,4]]);
snakee.draw();

// refreshCanvas();

// function refreshCanvas(){

// ctx.clearRect(0,0,canvas.width,canvas.height);
// setTimeout(refreshCanvas,delay);

// }

function drawBlock(position){

var x = position[0] * blockSize;
var y = position[1] * blockSize;
ctx.fillRect(x, y, blockSize, blockSize);
}

function snake(body){

this.body = body;
this.draw = function() {
ctx.fillStyle = "#ff0000";
for(var i = 0; i < this.body.length; i++) {
drawBlock(this.body[i]);
}
ctx.restore();
};

}
}
}

Voilà ce que nous voulois voir, au cas où ce n'était pas clair.

Infos
Gestion du forum

contact@geevey.com

API disponible. Utilisez le paramètre "api" en GET, peu importe le contenu, sur une page du site.

Notes

    Partenaire: JVFlux
    Ce site n'est pas associé à Jeuxvideo.com ou Webedia. Nous utilisons seulement des archives publiques.
    Il est inutile de me spammer par e-mail pour supprimer un topic. Au contraire, en conséquence, je mettrais votre topic dans le bloc ci-dessous.
Non-assumage
    Personne n'a pas assumé de topic pour le moment.