IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

setInterval appelant une fct° appelant elle même un autre setInterval


Sujet :

JavaScript

  1. #1
    Membre averti
    Femme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 32
    Par défaut setInterval appelant une fct° appelant elle même un autre setInterval
    Salut tout le monde ,

    voilà mon petit pb.

    lorsque dans une fonction on a 2 setInterval imbriqué l'un dans l'autre, les temps se multiplient c'est ça?
    J'ai un personnage qui se déplace en fonction des touches fléchées du clavier, ce personnage est appelé par un setInterval avec un temps de 200 ms.
    Mon personnage tente de traverser la rivière, pour ça, il marche sur des rondins de bois qui se trouvent sur la rivière (ces mêmes rondins de bois se déplacent de 3px toutes les 1000/30 ms).

    Je veux créer une fonction qui quand mon personnage se retrouve sur un rondin de bois, lui permet de se déplacer à la même vitesse que ces rondins de bois, et de ce fait que l'on ait l'impression qu'il est immobile sur le rondins de bois??

    J'ai pensé à créer une fonction qui lorsque les conditions sont respectées, va faire avancer mon personnage de 3px et ceci avec un setInterval et un temps x = 1000/30 * 200.

    Vu que les temps se multiplient???

    Mais ça ne marche pas


    Je ne sais pas si j'ai été clair, j’espère que si.



    Merci pour vos précieuses réponses!

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 658
    Billets dans le blog
    1
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  3. #3
    Membre averti
    Femme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 32
    Par défaut
    Merci pour ta réponse!

    Je ne connais pas encore jquery, et en plus tout mon jeu est déjà mis en place, j'ai utilisé canvas, pas de div...

    Mais je garde favoris ton exemple, ça me servira surement par la suite.


  4. #4
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Par défaut
    Je te déconseille d'utiliser setInterval pour ce que tu souhaites faire.

    Utilise plutôt requestAnimationFrame, qui fait en sorte de forcer le navigateur à afficher du mieux qu'il peut une animation à 60 fps ; ensuite pour tes déplacements d'objets tu peux gérer des valeurs numériques de vitesse propres à chaque objet. Si ton personnage est sur un rondin qui bouge, tu n'auras qu'à faire vitessePersonnage += vitesseRondin;

  5. #5
    Membre actif

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2012
    Messages : 30
    Par défaut
    salut,
    Pour ma part le setInterval me semble un peu déprecier
    il vaut mieux sont équivalant interopérable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    var _timer=setTimeout(function(){mafonction();},1000);
    function mafonction(){
    //netoyer la memoire
    clearTimeout(_timer)
    //si l'animation n'est pas terminer avancer
    if(!anim){
    //ici l'animation
    _timer=setTimeout(function(){mafonction();},1000)
    }
    }
    C'est très important d'utiliser un clearTimeout avant de chercher à savoir si l'on sort de l'animation ou non car en cas d'erreur tu risque de boucler à l'infinie et de constater plus de 3M de fois la même erreur.

    Bonne Chance

  6. #6
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Pour ma part le setInterval me semble un peu déprecier
    il vaut mieux sont équivalant interopérable
    Qu'est-ce que tu entends par là ?

    Ni setTimeout() ni setInterval() n'est déprécié et les deux sont aussi compatibles l'un que l'autre... A moins bien sûr que ton navigateur favori ne soit IE4, mais dans ce cas, le problème ne vient pas du code !
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  7. #7
    Membre Expert
    Avatar de Kaamo
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 165
    Par défaut
    Comme l'a fait remarquer SylvainPV, il vaut mieux utiliser requestAnimationFrame que setTimeout/setInterval. En effet, il permet d'optimiser les performances (CPU/GPU). Bien sûr, à utiliser avec un polyfill pour IE < 10 : requestAnimationFrame polyfill

    Aussi, plutôt que de jouer avec position absolute top/left, il est conseillé d'utiliser tranform (CSS 2D) pour gérer l'animation. Pareil, meilleure optimisation (GPU/CPU), meilleur FPS etc

Discussions similaires

  1. Probleme jointure d'une table sur elle même
    Par fred64 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 18/05/2006, 15h01
  2. [SQL2K] delete cascade d'une table sur elle même
    Par StormimOn dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 25/04/2006, 16h28
  3. une applet appel une autre applet !!!!
    Par mehdi82 dans le forum Applets
    Réponses: 2
    Dernier message: 22/12/2005, 09h53
  4. Croisement d'une table avec elle même
    Par lelapin dans le forum Langage SQL
    Réponses: 2
    Dernier message: 28/09/2005, 07h44
  5. [arborescence] jointure d'une table avec elle même ?
    Par Celelibi dans le forum Requêtes
    Réponses: 2
    Dernier message: 16/11/2004, 18h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo