2017-09-13 2 views
1

Je voudrais générer un nombre aléatoire, que j'utilise dans une instruction conditionnelle (If...else) en tant que variable. function PositionLoop(), dans lequel l'instruction conditionnelle a lieu, a l'affectation requestAnimationFrame. Cependant, j'aimerais que le nombre aléatoire ne soit pas re-généré dans chaque trame. C'est trop souvent et trop vite. Je voudrais que le numéro change toutes les 3 secondes, par exemple. Un autre problème est que la déclaration conditionnelle contient une variable (Font), que je me sers de nouveau à une autre ligne dans le code intérieurfunction PositionLoop() ...Nombre aléatoire en fonction avec frameRate différent

J'ai déjà essayé différentes choses - d'abord je créé une fonction pour le nombre aléatoire et appelez la variable à l'intérieur de l'autre fonction function PositionLoop() (Accessing variables from other functions without using global variables), puis j'ai essayé les variables globales -, mais cela ne fonctionne pas. Quelqu'un peut-il m'aider avec? - Merci beaucoup!

Ceci est mon code structure:

… 

function positionLoop() { 
    requestAnimationFrame(positionLoop); 

    … 


    var Zufallszahl1 = random(0,30); 
    var Font; 
    if (Zufallszahl1 = 6) { 
     Font = …; 
    } else if (Zufallszahl1 = 8) { 
     Font = …; 
    } else { 
     Font = …; 
    }; 

    if (parameter < x) { 
     Schriftart = …; 
    } else if (parameter > x) { 
     Schriftart = Font; 
    } else { 
     Schriftart = …; 
    }; 

    var Gestalt = selectAll('.class1'); 
    for (var i = 0; i < Gestalt.length; i++) { 
     Gestalt[i].style('font-family', Schriftart); 
     Gestalt[i].style(…); 
     Gestalt[i].style(…); 
     … 
    }; 

    … 

}positionLoop(); 

… 
+1

_ "Cependant, je voudrais le nombre aléatoire de ne pas générer de nouveau dans chaque Cela est trop souvent et trop vite. "_ Eh bien, combien de fois vous voulez le mettre à jour? –

+1

* "une boucle if" *: qu'est-ce que c'est? – trincot

+0

D'accord avec les deux commentaires précédents. Juste pour vous aider un peu, 'positionLoop' recevra un HighResTimeStamp (similaire à performance.now) que vous pouvez utiliser pour déclencher des événements spéciaux à intervalles réguliers. – Kaiido

Répondre

0

Vous pouvez utiliser un intervalle séparé pour que:

(function() { 
    var Zufallszahl1; 
    function changeZufallszahl1() { 
     Zufallszahl1 = random(0,30); 
     if (Zufallszahl1 = 6) { 
      Font = …; 
     } else if (Zufallszahl1 = 8) { 
      … 
     } else { 
      … 
     } 

     … 

    } 

    changeZufallszahl1(); 
    // Repeat with whatever delay you want between changes 
    setInterval(changeZufallszahl1, 1000); 

    // Keep your animation loop separate: 
    function positionLoop() { 
     requestAnimationFrame(positionLoop); 

     … 


    } 
    positionLoop(); 
})(); 
+0

Merci pour votre réponse! J'ai vraiment oublié de mentionner sth. impotant (désolé): l'instruction conditionnelle (if ... else) contient une variable (Font), que j'utilise à nouveau sur une autre ligne du code dans la fonction PositionLoop() ... –

+0

Il suffit de définir cette variable au même endroit que ' Zufallszahl1', donc dans le cadre de l'IIFE. – trincot

+0

agréable son travail! Merci beaucoup!!! :) –