laaz;4690477 a dit :
a) Peux-tu poster le code de detection de collision en spoiler ? Sans code, difficile de t'aider !
Pour voir le code :
f12 sous chrome ou firefox pour ouvrir le débugguer, onglet script / voir carrément cliquer sur le nom du script (script.js)
Pas besoin de poster son code sur le forum ^^ en plus c'est souvent directement éditable dans le débugguer.
@Lau-rie
Java != JQuery encore une fois
JQuery = Javascript.
Je jette un ptit coup d'oeil.
------------
C'est normal que tu fasses jamais appel à collision2() ?
------------
Alors plusieurs choses :
- Apprends à utiliser le débugueur présent dans les navigateurs ! D'abord parce qu'il t'affiche les erreurs dans le code JS (et donc tu aurais pu peut être avancer), et aussi que dans ton code tu peux utiliser "console.log(variable)" pour t'afficher en console le contenu d'une variable. (Touche f12 pour ouvrir le débugueur)
- Donc tu as un souci à l'intérieur même de collision2() : tu fais des tests sur les variables xPosition2 et yPosition2 alors qu'elles ont été définies dans collision(). Du coup à la fin de collision(), ces variables sont détruites et tu ne peux plus les utiliser ! Il faut que tu les déclare en global, où que tu les redéclares dans collision2().
- Ensuite comme dans le code fourni tu n'as pas mis ta manière d'appeler collision2(), je pars du principe que tu as voulu l'appeler juste après collision(), c'est à dire à la fin de MoveMonkey(). Seulement le souci, c'est que de faire ton test de collision avec la banane jaune à la fin du déplacement, ça va fonctionner puisque la banane jaune ne bouge pas. Quand le singe
vient de terminer son déplacement, la banane est soit en collision, soit pas du tout. Sauf qu'avec la banane rouge, quand le singe
vient de terminer son déplacement, la banane peut être carrément ailleurs, et au moment où la banane entre en collision visuellement avec le singe, ton test est
déjà terminé depuis longtemps. Pour régler ça, tu dois faire un setInterval sur collision2, pour l'obliger à tester toutes les x ms si une collision a lieu, de cette manière :
setInterval(collision2,100);
- Et enfin, en parlant de setInterval, je pense que tu n'avais pas compris son fonctionnement.
Avec ce code :
xBananeR = setInterval(parseInt($("#bananerouge").css("left")),10);
Je suppose que tu as voulu faire en sorte de mettre à jour la position de la variable xBananeR (et aussi yBananeR), automatiquement toutes les 10ms. Sauf que setInterval ne te retourne pas du tout le résultat de parseInt(..).
D'après la doc w3school :
setInterval return an integer with the ID value of the timer that is set. Use this value with the clearInterval() method to cancel the timer.
Donc tu vois, rien à voir
Comme solution, je te propose d'utiliser cette portion de code suivante :
setInterval(updatePositionRedBanana,10);
function updatePositionRedBanana() {
xBananeR = parseInt($("#bananerouge").css("left"));
yBananeR = parseInt($("#bananerouge").css("top"));
xBananeR2 = xBananeR + 80;
yBananeR2 = yBananeR + 75;
}
Pour garder à jour tes variables nécessaires à ton test de collision.
- Un tout dernier point, par rapport à ta façon d'utiliser animate() et ta fonction déplacer(). Ta façon de boucler en appelant déplacer() dans ton callback de animate (le callback = la fonction que tu passes en dernier argument de animate() qui sera appelée à la fin de l'animation) est assez mauvaise et pourrait provoquer des erreurs de "Maximum stack call". Je te en remplacement de ta fonction deplacer le code suivant :
setInterval(animateRedBanana,2000);
function animateRedBanana() {
$('#bananerouge').animate({top: "+=690"}, 1500, 'linear', resetPositionRedBanana);
}
function resetPositionRedBanana() {
xBananeR = 0; // ou Math.random ..etc
yBananeR = "-75px";
$("#bananerouge").css("top", yBananeR);
$("#bananerouge").css("left", xBananeR);
}
qui d'un point de vue de logique a plus de sens, et qui se résume en :
-Toutes les deux secondes, on relance l'animation de la banane rouge
-A la fin de chaque animation, on reset la position de la banane.
Voilà, normalement tu as toutes les informations pour modifier ton code. Tiens nous au courant de si tu y arrives ou pas, je pourrais être dispo cette nuit et demain dans l'après-midi