1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151
| /* Calcul de la distance entre deux points */
var distance = function (xA, yA, xB, yB) {
return Math.sqrt(Math.pow(xA-xB,2)+Math.pow(yA-yB,2));
};
/* Création du contexte du canevas */
var canevasTableau = document.getElementById('tableau');
var contexteTableau = canevasTableau.getContext('2d');
var aCommence = false; /* Teste si l'exploration du tableau a commencé */
/* Exploration du tableau à la souris */
var exploration = function() {
var son=false; /* Booléen testant si un son est en train d'être joué */
/* Divers sons correspondants aux textes dits par les personnages */
var liberte = new Audio('sncf.mp3');
var ouvrier = new Audio('hennissement.mp3');
var assaillant = new Audio('vache.mp3');
var arreterTousLesSons = function () {
liberte.pause(); /* Met en pause le son */
liberte.currentTime=0; /* Remet le son au début = stoppe le son */
ouvrier.pause(); /* Idem pour tous les personnages */
ouvrier.currentTime=0;
assaillant.pause();
assaillant.currentTime=0;
}
/* Effacement du cadre de début de l'animation */
contexteTableau.clearRect(0, 0, 800, 642);
/* Actions selon la position de la souris */
canevasTableau.onmousemove = function(souris) {
/* Récupération des coordonnées de la souris */
var tailleRect = canevasTableau.getBoundingClientRect();
x = 0;
y = 0;
x = souris.clientX - tailleRect.left; /* Correction de l'erreur de lecture de la position */
y = souris.clientY - tailleRect.top;
/* Tests de position de la souris et action */
if (distance(x, y, 475, 124)<=65) { /* La Liberté */
if (!son) { /* Si aucun son n'est en cours */
arreterTousLesSons();
liberte.play(); /* Joue le son correspondant au personnage */
son=true; /* Un son est en train d'être joué */
contexteTableau.beginPath(); /* Dessin de la zone où est la souris */
contexteTableau.fillStyle='rgba(255, 255, 255, 0.2)';
contexteTableau.arc(475, 124, 65, 0, 2*Math.PI);
contexteTableau.fill();
}
} else if (distance(x, y, 340, 350)<=60) { /* Ouvrier avec bandana au pied de la Liberté */
if (!son){
arreterTousLesSons();
ouvrier.play();
son=true;
contexteTableau.beginPath();
contexteTableau.fillStyle='rgba(255, 255, 255, 0.2)';
contexteTableau.arc(340, 350, 60, 0, 2*Math.PI);
contexteTableau.fill();
}
} else if (distance(x, y, 590, 260)<=60) { /* Assaillant à la gauche de la Liberté */
if (!son){
arreterTousLesSons();
assaillant.play();
son=true;
contexteTableau.beginPath();
contexteTableau.fillStyle='rgba(255, 255, 255, 0.2)';
contexteTableau.arc(590, 260, 60, 0, 2*Math.PI);
contexteTableau.fill();
}
} else { /* La souris est dans une zone où il n'y a pas de personnage */
if (son) { /* Si un son est en cours */
arreterTousLesSons();
contexteTableau.clearRect(0, 0, 800, 642); /* Efface la zone circulaire dessinée */
son=false; /* Aucun son n'est joué désormais */
}
}
};
};
var intro = function() {
/* Dessin de l'écran de départ */
contexteTableau.fillStyle='rgba(255, 255, 255, 0.25)';
contexteTableau.fillRect(50, 50, 700, 542); /* Grand rectangle transparent */
contexteTableau.fillStyle='rgba(200, 200, 200, 1)';
contexteTableau.fillRect(200, 261, 400, 120); /* Petit rectangle opaque et cliquable */
contexteTableau.font = "35px Calibri,Arial";
contexteTableau.textAlign = "center";
contexteTableau.fillStyle = "#444";
contexteTableau.fillText("Activez le son... ", 400, 300);
contexteTableau.fillText("et cliquez ici !", 400, 337);
contexteTableau.font = "20px Calibri,Arial";
contexteTableau.fillText("Puis laissez glisser la souris sur le tableau...", 400, 365);
/* Détecte si la souris passe ou sors de la zone à cliquer pour commencer */
canevasTableau.onmousemove = function(souris) {
/* Récupération des coordonnées de la souris */
var tailleRect = canevasTableau.getBoundingClientRect();
x = 0;
y = 0;
x = souris.clientX - tailleRect.left;
y = souris.clientY - tailleRect.top;
/* Si la souris est dans le cadre à cliquer, inverse les couleurs, sinon, revient aux couleurs de départ */
if (x>=200 && x<=600 && y>=261 && y<=381) {
contexteTableau.fillStyle='#444';
contexteTableau.fillRect(200, 261, 400, 120);
contexteTableau.font = "35px Calibri,Arial";
contexteTableau.textAlign = "center";
contexteTableau.fillStyle = "rgba(255, 0, 0, 1)";
contexteTableau.fillText("Activez le son... ", 400, 300);
contexteTableau.fillStyle = "rgba(200, 200, 200, 1)";
contexteTableau.fillText("et cliquez ici !", 400, 337);
contexteTableau.font = "20px Calibri,Arial";
contexteTableau.fillText("Puis laissez glisser la souris sur le tableau...", 400, 365);
} else {
contexteTableau.fillStyle='rgba(200, 200, 200, 1)';
contexteTableau.fillRect(200, 261, 400, 120);
contexteTableau.font = "35px Calibri,Arial";
contexteTableau.textAlign = "center";
contexteTableau.fillStyle = "#444";
contexteTableau.fillText("Activez le son... ", 400, 300);
contexteTableau.fillText("et cliquez ici !", 400, 337);
contexteTableau.font = "20px Calibri,Arial";
contexteTableau.fillText("Puis laissez glisser la souris sur le tableau...", 400, 365);
}
};
/* Teste le clic de la souris sur le canevas : Attention ! Il est nécessaire de cliquer sur le canevas pour pouvoir jouer les sons au passage de la souris */
canevasTableau.onclick = function(souris) {
/* Récupération des coordonnées de la souris */
var tailleRect = canevasTableau.getBoundingClientRect();
x = 0;
y = 0;
x = souris.clientX - tailleRect.left;
y = souris.clientY - tailleRect.top;
/* Si le clic a lieu dans le rectangle opaque, lance l'exploration du tableau */
if (x>=200 && x<=600 && y>=261 && y<=381) {
aCommence = true;
exploration();
}
};
};
intro(); |
Partager