1

機能がありますGoToCell(number); この機能はプレイヤーの動きをレンダリングします。私はそのような状況が発生しています:人は最後の呼び出しの実行の前にこの関数を2回呼び出します。コールはドロップされ、2コールから実行を開始します。私は2つを呼び出す必要があります最後までそれを実装する方法ではありませんでしたか?

4

3 に答える 3

4

あなたが抱えている問題はおそらくスレッドとは関係ありませんが、アニメーションや映画の再生とは関係があります。質問から見分けるのは難しいです。

ただし、どちらの場合も、アニメーションなどが進行中であることを示すフラグを設定し、その上で完了コールバックを使用してフラグをクリアすることが答えです。次に、ユーザーがウィジェットなどをクリックしたときにフラグを確認し、アニメーションなどの2番目のコピーを開始しないでください。

繰り返しになりますが、コードやコンテキストがないと、具体的に支援するのは難しいので、jQueryアニメーションを使用した例を次に示します。「jQueryを使用する」などと言っているのではなく、上記の概念を示しているだけです(フラグの設定、重複したアクティブ化の防止、完了コールバックの使用)。

ライブコピー| ソース

HTML:

<input type="button" id="theButton" value="Click to animate">
<div id="target"></div>
<div id="output"></div>

CSS:

#target {
  position: absolute;
  left: 0px;
  top: 3em;
  border: 1px solid black;
  background-color: #00d;
  width: 20px;
  height: 20px;
}
#output {
  margin-top: 6em;
}

JavaScript:

jQuery(function($) {

  var animating = false;
  var direction = "+";

  $("#theButton").click(function() {
    // Are we already animating?
    // (Of course, ideally you'd disable the button or similar)
    if (animating) {
      // Yes, say we're busy
      display("Animation still in progress");
    }
    else {
      // No, do it
      display("Animating...");
      animating = true;
      $("#target").animate({
        left: direction + "100"
      }, 3000, function() {
        // Completion callback, we're not animating anymore
        animating = false;
        display("Done");
      });
      direction = direction === "+" ? "-" : "+";
    }
  });

  function display(msg) {
    $("<p>").html(String(msg)).appendTo("#output");
  }

});
于 2012-04-30T14:09:09.790 に答える
1

Webワーカーを確認することをお勧めします。 https://developer.mozilla.org/En/Using_web_workers

これまでのところ、javascriptでスレッドのような動作をする可能性はこれだけです。ただし、すべてのブラウザに実装されているとは思いません。

于 2012-04-30T14:07:51.443 に答える
1

探していることを実行するためにワーカーまたはスレッドが必要かどうかはわかりません。

関数用のIMOアンダースコアの関数はdebouncethrottleまたはで探しているものを達成するのに役立ちます。once

アンダースコアを使用したくない場合は、ライブラリのソースを読むことをお勧めします。ライブラリはかなり短く、コメントも豊富です。

于 2012-04-30T14:08:22.100 に答える