私は、Web WorkersとJohn Resigの素晴らしいProcessing.js(まあ、まったく新しい 'Javascriptコンセプト '、しかしあなたは私の考えを得る)。どちらの素晴らしい例もインターネットをさまよっていますが、どちらのテクニックも効果的に使用しているものはまだありません。それはかなり面白いと私には強力なので、私はちょうどそれを試してみるほうがいいと思った。Processing.jsとWeb Workersのパワーを組み合わせる
しかし、私は実際にそれらの2つを統合するための最高のスクリプトデザインを見つけることができません... Processing.jsが採用されているとき、通常、いくつかのクラスが定義されているようです 'Processing -応用'。これは、Javaのような構文を使用してこれを行うことができます。しかし、これらのクラスはProcessingアプリケーション内でのみアクセス可能です。しかし、我々は労働者を持っている... this驚くべき例では、Javascript関数オブジェクトは最初に別のスクリプトで定義され、Worker-usageが必要な場合、Worker-scriptはそのオブジェクトのプロトタイプと種類の 'それ自体に
私には、Workerスクリプトの中で、Processing-applicationで定義したクラスにアクセスできないという意味で、2つは「互換性がありません」と思われます。おそらく理由のために、Processingのようなクラスは間違いなくJavascriptのようなものではないからです。私が見る限り、私はWorkerスクリプトでクラスの同様の定義を(新しい関数プロトタイプの形で)作成する必要があります。これはメンテナンス性にはあまり良くなく、ひどく悪いデザインのようです私はまだこのテーマについては大変な初心者ですが、私にはそうです。
私は何か見落としていますか?私は何かがほしいと思っていますか?それとも、私はいくつかの基本的な概念を誤解していますか?
ありがとうございました!
編集:
が、ために作業を行うことになっていますオブジェクトのような「形」にするために労働者のプロトタイプをいじってみてくださいするようになったが、これは進むべき道ではないかなりすぐに実現。
作業の概要を試してみましょう: 私はクラス「ボール」を持っていますが、2次元の位置を保存する以外は何もしません。すべてのdraw()
サイクルでProcessing.jsはupdate()
メソッドを呼び出し、ボールを新しい位置にします。その後、display()
メソッドが呼び出され、Ballはその現在の位置に小さな円を描きます。
はじめに複雑なことはありません。ここで、ボールの新しい位置を決定することは、例えば複雑な重力場を通じたボールの動きを含む場合、かなり高価な操作であると仮定します。この計算を描画する前に毎回行う必要がある場合は、少なくともいくらかの遅延が発生します。しかし、このようなことを同時に行うことができれば、よりスムーズな実行が可能になります。だから、Ballクラスにプロパティリストに余分な「ポジション」配列を与えることができました。その配列は連続するすべての場所を保持します。ボールがインスタンス化されると、位置の計算を開始する新しいワーカーが作成され、完了するたびに新しい2次元位置を含むメッセージがボールにポストバックされます。 Ballはこの位置の配列上でこれを押します。その位置を更新するたびに、配列内の次のレコードに移動します。
全体的に - 良いか悪いのですか?良い場合は、どのようにこれを設計するための提案?
いいえ、これはそうではありません - 描画が初期化されると、新しいものが見つかるたびに、それはメインスレッドに提出されます。そこには、一種の「キャッシング」配列に格納されているので、後で使用することができます。ただし、描画が行われている間は計算が続行されるため、フレームごとに遅延はなく、開始するまでに遅延はありません。 – JorenB