2016-01-25 1 views
3

Edit: Cette question concerne Roblox Lua. J'utilise math.sin(tick()) pour obtenir un nombre variable et je voudrais qu'il commence toujours à 0. Est-ce possible en utilisant math.sin? Y at-il autre chose que je peux utiliser autre que tick() pour que cela fonctionne?Est-il un moyen de toujours commencer à 0 en utilisant math.sin() Lua

Exemple:

for i = 1, 10 do 
    local a = math.sin(tick())+1 
    print(a) 
    wait() 
end 
wait(1) 
for i = 1, 10 do 
    local a = math.sin(tick())+1 
    print(a) 
    wait() 
end 

Mon but est d'avoir ce début de nombre à 0 à chaque fois, puis augmenter à partir de là. Donc, il commencerait à 0 puis augmenterait à 2 puis diminuerait à zéro et continuerait à moduler entre 0 et 2 tant que je continuerais à l'appeler. En utilisant l'exemple ci-dessus le nombre commence à n'importe quel nombre arbitraire entre 0 et 2.

+0

Qu'est-ce que 'tick' exactement? Ce n'est pas une fonction standard de Lua. –

+0

@Nicol C'est une fonction ROBLOX, elle renvoie le nombre de secondes depuis le 1er janvier 1970 (je pense). A quelques décimales aussi. – warspyking

+0

@NicolBolas Renvoie l'heure UNIX locale. –

Répondre

1

Pour les utilisateurs non-Roblox: tick() retourne le temps UNIX local. wait(t) donne le thread actuel pour t secondes, le plus petit intervalle possible étant d'environ 1/30ème de seconde.

Étant donné que math.sin(0) est égal à 0, ce que vous avez à faire est de soustraire le tick() à l'intérieur de la boucle avec l'heure à laquelle la boucle a commencé. Cela devrait faire en sorte que l'expression math.sin commence à environ 0 au début de la boucle.

local loopstart = tick() 
for i = 1, 10 do 
    local a = math.sin(tick() - loopstart)+1 
    print(a) 
    wait() 
end 
+0

Merci, xaxa. C'est une solution de travail utilisant math.sin (tick()). @KeithThompson fait la même suggestion et cela fonctionne. Il commence à 1 au lieu de 0, mais la partie la plus importante est qu'elle commence au même nombre à chaque fois. Parfait. Je vais excepté ceci comme réponse. – JJJ

2

J'ai pris une approche différente et suis venu avec ceci. Il fait exactement ce que je voulais faire avec math.sin (tick()). Si quelqu'un connaît d'autres façons d'accomplir cela, j'aimerais savoir.

local n = 0 
    local m = 0 
    local Debounce = true 

    local function SmoothStep(num) 
     return num * num * (3 - 2 * num) 
    end 

    while Debounce do 
     for i = 1, 100 do 
      wait() 
      m = m+.01 
      n = SmoothStep(m) 
      print(n) 
    if not Debounce then break end 
     end 

     for i = 1, 100 do 
      wait() 
      m = m+.01 
      n = SmoothStep(m) 
      print(n) 
    if not Debounce then break end 
     end 
    end 
+1

Ce n'est pas * exactement * la même chose. Si vous représentez graphiquement les valeurs imprimées, vous verrez une onde triangulaire plutôt qu'une onde sinusoïdale. Si cela vous convient, c'est bien. –

+1

Je vois. Cela convient à mon but, mais oui, ce n'est pas exactement la même chose. Je l'édite et j'ajoute une fonction smoothstep pour la rapprocher d'une vraie onde sinusoïdale. – JJJ