JeuWeb - Crée ton jeu par navigateur

Version complète : Problème JS compte à rebours
Vous consultez actuellement la version basse qualité d’un document. Voir la version complète avec le bon formatage.
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>";
}
}
et tu l'appelles comment ta fonction ?
setTimeout ne s'utilise pas avec une string (enfin, ça marche mais ça craint), il faut utiliser une fonction.
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>";
(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);
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.
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.
Merci pour la non-aide.
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..)
Pense à utiliser les bons tags pour ton code, afin qu'il soit coloré. Plutôt que code, il faut mettre code=Javascript.