2017-08-28 8 views
0

私は一度に1単語ずつプッシュしたいテキストフィールドを持っています。単語は配列にあります。表示される単語間の遅延は1秒に設定されます。最初の単語は2秒間表示されます。したがって、奇妙なダブルステートメント。Framerの遅延を反復する

msgArray = [ 
    ["Hello", "World"], 
    ["89:23", "Tom Eriksen","Scooores!!"], 
    ["Overtime", "about to", "start"]] 

printMessageLoop = (msgArray, target) -> 
target.text = msgArray[0] 
timeToRead = 1 
Utils.delay timeToRead,() -> 
    for i in [1..msgArray.length-1] 
     Utils.delay timeToRead*i,() -> 
      target.text = msgArray[i] 
      print "i="+i #debugging purpose 

私はprintMessageLoop(msgArray[2])を呼び出すときtargetは、正しく最初の単語が表示されますが、最後の二つは「未定義」です。プリントアウトは言う:

printMessageLoop(msgArray[2]) 

»i=3 
»i=3 

それはラインtarget.text = msgArray[i]iが最後iに設定されていることを実行したときのように思えます。つまり、私は++ 3です

なぜですか?そして私はどうすれば周りを回ることができますか?遅延前

答えて

0

コールdo (i) ->は、iの現在値が将来の命令に転送されますを確認します

printMessageLoop = (msgArray, target) -> 
target.text = msgArray[0] 
timeToRead = target.text.length/20 * readingSpeed 
Utils.delay timeToRead,() -> 
    for i in [1..msgArray.length-1] 
     do (i) -> 
      Utils.delay timeToRead*i,() -> 
       target.text = msgArray[i ] 
       print "i="+i 
       timeToRead = target.text.length/20 * readingSpeed 
関連する問題