2011-12-03 33 views
1

JSとJQueryの新機能です。 私はJQueryでGuitarHeroゲームのタイプを作成しようとしていますが、ノートが滑らかに落ちていません 私がやっていることは基本的にはループ内でsetTimeout()を呼び出すことです - それぞれが異なるタイムアウト( "あなたがそうするならば、歌の小道具 ")。jquery animationがスムーズでない

while(counter < curSong.numNotes){ 
       // set the parameters sent to runCreateNote 
     runCreateNote(counter, margin, entity, interval, name); 
     counter++; 
} 

ときsetTimeout()(スコープの目的のために)runCreateNote呼び出し

これはアニメーションコードです:コードのいずれかが関連している場合、私はdonnow

noteBall.animate({ 
      top: (noteBall.parent().height() - noteBall.height()*2) + 'px' 
     }, { 
      duration: fallingtime, 
      queue: false, 
      easing: "linear", 
      step: function() { 
       checkStep(id); 
      }, 
      complete: function() { 
       reachBottom(id);  
      } 
    }); 

    function checkStep(id){ 

     var noteBall = $("#" + id); 
     var name = id.substring(0,1); 
     if (name == "R"){ 
      if (isInRange(noteBall)){ 
       isRedIn = true; 
      } else { 
       isRedIn = false; 
      } 
     } 
     if (name == "B"){ 
      if (isInRange(noteBall)){ 
       isBlueIn = true; 
      } else { 
       isBlueIn = false; 
      } 
     } 
     if (name == "G"){ 
      if (isInRange(noteBall)){ 
       isGreenIn = true; 
      } else { 
       isGreenIn = false; 
      } 
     } 
     if (name = "O"){ 
      if (isInRange(noteBall)){ 
       isOrangeIn = true; 
      } else { 
       isOrangeIn = false; 
      } 
     } 

} 

しかし のコードは次のようになります私はちょうどアニメーションがあまりにも重く見えないことを示したい(私はそれがスムーズに実行されると思います)

am私はいくつかの重要な原則を欠いている

答えて

0

さて、あなたのコードやアプリケーションのデモの残りの部分を見ることなく、私の推測では、これはあなたに問題を与える行であることを次のようになります。

top: (noteBall.parent().height() - noteBall.height()*2) + 'px' 

あなたは事前にそれらの値を計算することができればとそれらをキャッシュすれば、おそらく良いでしょう。

また、checkStep内のすべてのif文を取ってswitch文(または少なくとも/ else)に移動することも考慮する必要があります。

+0

私は先に計算して、varとして渡すことを試みましたが、違いはありません。 問題はcheckStepに何かを置く前にそこにあったので、私はそれが問題だとは思わない。 他のコードが必要な人は - plz私に知らせて、私はそれを投稿します...ちょうどそのすべてであなたを気にしたくない – levtatarov

関連する問題