JeuWeb - Crée ton jeu par navigateur
Problème JS compte à rebours - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Problème JS compte à rebours (/showthread.php?tid=6714)



Problème JS compte à rebours - Netthos - 14-03-2013

Bonjour,

Depuis plus d'une heure je suis bloqué sur mon compte à rebours en JS. En fait il s'agit d'un code que j'ai trouvé sur ce forum et que j'ai un peu modifié à ma sauce. Mais je ne m'y connais pas du tout en JS, du coup j'ai un peu fait à l'arrache même si on peut comprendre le gros du fonctionnement.

J'ai donc un compte à rebours qui doit s'affiché si une ou des constructions sont en cours. Je fais passer dans le fonction reste() le nom du bâtiment en construction, le niveau en construction, le nombre de seconde restantes de construction, id de la construction en cours qui sert à nommer les div différents pour afficher plusieurs comptes à rebours et enfin le lien qui doit s'afficher à la fin de la construction.

Mon soucis vient, je pense, de la syntax de la fonction setTimeout(), mais j'ai eu beau la tourner dans tous les sens, je n'y arrive toujours pas ! En fait, le compte à rebours reste bloqué, il ne tourne pas. J'ai juste le temps restant au moment d'actualisation de la page qui s'affiche.

Si certains peuvent m'aider !

Voici le code JS :


function reste(nom, niveau, zetime, nom_id, zelien) {
var nid = nom_id;
var lien = zelien;
if (zetime>0) {
var heures = Math.floor(zetime / 3600);
var minutes = Math.floor(((zetime / 3600) - Math.floor(zetime / 3600)) * 60);
var secondes = zetime - ((Math.floor(zetime / 60)) * 60);
document.getElementById(nid).innerHTML = "<center>"+ nom + " <strong>Niveau " + niveau + "</strong> - " + heures + ":" + minutes + ":" + secondes + "</center>";
var restant = zetime - 1;
var fonction = "reste(" + nom + "," + niveau + "," + restant + "," + nid + "," + lien + ")";
// alert(fonction);
setTimeout("reste(" + nom + "," + niveau + "," + restant + "," + nid + "," + lien + ")", 1000);
}
else {
document.getElementById(nid).innerHTML = "<center>"+ nom + " <strong>Niveau " + niveau + "</strong> - " + "<a href='" + lien + "'>Terminé</a>" + "</center>";
}
}



RE: Problème JS compte à rebours - popayan - 14-03-2013

et tu l'appelles comment ta fonction ?


RE: Problème JS compte à rebours - niahoo - 14-03-2013

setTimeout ne s'utilise pas avec une string (enfin, ça marche mais ça craint), il faut utiliser une fonction.


RE: Problème JS compte à rebours - Netthos - 14-03-2013

Il faut utiliser quoi niahoo alors ?

Sinon, la fonction est appelée ainsi :


echo '<div id="'.$rep['id'].'"></div>';
echo "<script language='JavaScript'>reste('".$constructions[$rep['table']][$reponse['type']]."', '".$rep['niveau']."', '".$temps_restant."', '".$rep['id']."', 'index.php');</script>";



RE: Problème JS compte à rebours - niahoo - 14-03-2013

(14-03-2013, 02:07 PM)niahoo a écrit : [...] Il faut utiliser une fonction.

Tu dois passer une fonction comme argument à setTimeout.

par exemple :


setTimeout(function() { alert("1 seconde s'est écoulée !"); }, 1000);



RE: Problème JS compte à rebours - Netthos - 14-03-2013

Je vois pas comment faire ça. En plus comme je bloque depuis un long moment je suis bloqué dans ma réflexion.

J'ai regardé la console d'erreur de chrome, ça me dit ressort le nom de la construction qui passe dans la fonction et ça me dit que la fonction {nom de a construction en cours que j'ai donné} n'est pas définie, alors que c'est un argument.


RE: Problème JS compte à rebours - niahoo - 14-03-2013

Parce que tu ne mets pas de quotes dans ton appel de setTimeout. Rajoutes-les, ou bien fais un effort et apprends à utiliser setTimeout en lui passant une fonction.


RE: Problème JS compte à rebours - Netthos - 14-03-2013

Merci pour la non-aide.


RE: Problème JS compte à rebours - niahoo - 14-03-2013

Et donc, en rajoutant les quotes dans ton appel à setTimeout ça donne quoi ? (Je rappelle que ce forum n'est pas fait pour apprendre la programmation, mais pour apprendre à créer des jeux quand on a déjà des compétences en développement, graphisme, game design, community management, etc..)


RE: Problème JS compte à rebours - Sephi-Chan - 14-03-2013

Pense à utiliser les bons tags pour ton code, afin qu'il soit coloré. Plutôt que code, il faut mettre code=Javascript.