質問

私はいくつかのJavaScript言語に2つの(比較的)新しい概念について読ん行ってきた - ウェブ労働者とジョンResig氏の素晴らしいProcessing.js(まあ、そうでもない新しい「Javascriptの概念」を、しかし、あなたは私のアイデアを得ます)。両方のいくつかの素晴らしい例がのインターネットをさまようが、私は効果的に両方の技術を採用してものを見つけるためには至っていません。それは私にはかなり面白いと強力に見えるので、私は、私はちょうどそれを試してみるより良いだろうと思ってます。

しかし、私は実際にそれらのうちの2つを統合するための最良のスクリプト設計を把握することはできません... Processing.jsを採用した場合、通常は、いくつかのクラスがに定義されているように私には思えます> 'プロセッシング・アプリケーションの。それはあなたがこれについて移動するには、Javaに似た構文を使用することができます。明白である - しかし、これらのクラスは、処理アプリケーション内でのみアクセス可能です。しかし、その後、私たちは...でこれは驚くべきの労働者を持っています例は、JavaScript関数オブジェクトが最初に別のスクリプトで定義され、労働者、使用が所望される場合、その上に「ボルト」自体ののプロトタイプと種類オブジェクトワーカー・スクリプトをインポート

私には、二人は、あなたの労働者のスクリプトにいるときにあなたは、あなたが処理アプリケーションで定義されたクラスにアクセスすることができない、「互換」いないようです。おそらく理由で、処理のようなクラスとしては間違いなく非常にJavascriptのようなものではありません。私の知る限り見ることができるように、私は私のワーカースクリプト内の(新しい関数プロトタイプの形で)クラスの同様の定義を行う必要があります - 保守のための非常に良いではない、とだけひどく悪いデザインのように思えます私には、私はまだこのテーマに関する大きな初心者だにもかかわらずます。

私は何かを望むだろうか?私はちょうどことになっていない何かをしたいですか?または私はちょうどいくつかの基本的な概念を誤解している?

助けてくれてありがとう!

編集

のための作業を行うことになっていますオブジェクトのように「形」にために労働者のプロトタイプをいじってみてくださいするようになったが、これは進むべき道ではないもうすぐ実現。

のはで動作するようにアウトラインを試してみましょう: 私はかなりの二次元位置を保存する以外何もしないクラスの玉」を、持っています。すべてのdraw()サイクルでは、Processing.jsはボールが新たなポジションを採用作るそのupdate()メソッドを呼び出します。その後、ボールを持っていると呼ばれるdisplay()メソッドは、現在の位置に小さな円を描きます。

そもそも複雑な

何もありません。さて、ボールの新しい位置を決定することは、かなり高価な操作であると仮定 - 例えば、それは、複雑な「重力フィールドを介してボールの動きを伴う場合。この計算は描画する前に、一つ一つの時間を行う必要がある場合は、それが、少なくともいくつかの遅延が発生します。あなたは、同時にこのようなものを行うために管理したい場合は、それがスムーズに実行している場合があります。だから、私はその連続した位置のすべてを保持するそのプロパティリストでボールクラスの余分な「位置」の配列を、与えることができる考え出しました。ボールがインスタンス化されるとき、それは位置を計算開始する新しいワーカーを作成し、それは、1つを完了するたびに、新たな二次元位置を含む、ボールにメッセージをバックポストします。ボールは、その位置のアレイにこれをプッシュするので、その位置を更新する必要があるたびに、それだけで、アレイ内の次のレコードに歩きます。

すべてのすべて - 良いか悪いアイデア?良い場合は、これを設計する方法上の任意の提案ですか?

役に立ちましたか?

解決

3Dゲーム物理学のシムズ(のようなXBOX360の)通常、フレームレートとは無関係に、一定の速度で実行します。物理学は、解析的にモデル化するためにあまりにも複雑だからですので、あなたが確定的エラーを同期する必要があるので、あなたは、数値近似を行います。追加の利点は、など、物理学のパフォーマンスから、フレームレート切り離されているので、あなたは5Hzの時に、あなたの物理学を更新して補間することができます。

だから、あなたが記述モデルは、プロがそれを行う方法を正確にです。

他のヒント

  

あなたは、あなたが処理アプリケーションで定義されたクラスにアクセスすることはできません   あなたの労働者のスクリプトにいるとき。おそらく理由は

これは同時に同じ共有データを変更すること、複数の作業者によるエラーを防止することです。メッセージでは、データがコピーされ、それがエラーの原因の同時書き込みを心配する必要はありませんので、各労働者は、自身のコピーを取得します。これはそれについて(何のセマフォまたは同期らを)心配する必要はプログラマせずに、それを扱う同時実行のエラーを回避するための簡単な方法です。

この例では位置の計算がボールを描画する前に終了する必要が - ので、非同期処理は意味がありません。

P5自体は非常に同期している - 。すべての描画を行う一つの中央の描くの方法がある。

彼らは、描画のために使用することはできませんので、

また、ウェブの労働者は、DOMにアクセスすることはできません。

がゲームのような、より複雑な、イベントベースのアプリケーションは、Web労働者のための用途の可能性について。

ただ、思考...しかし、信号処理で、あなたが思い付くされないものをするデジタル情報にアナログ信号をアップスライスサンプルレート。キーはオリジナルを再現する信号のちょうど十分に保持することです。方法のようにMP3年代は128、192、などを使用して音楽ファイルからリッピングされます。

は、(すなわち、放物線に沿って)数学的に定義可能な方法でボールを移動しているのであれば、あなたは、アナログパスを近似座標のセットにパスを変換することができなければなりません。これらのCOORDSは完全なパスより計算することがはるかに高速になります。また、(サンプリングレートを変更することで)調整可能になります。

私は、これはProcessing.jsまたはWeb労働者についてのご質問のいずれかに対応していません知っています。あなたがより効率的に、これらの計算を実行するのに役立つだけでアイデアます。

このアイデアは、Google App Engineのに統合されたGoogleのタスクキューのアイデアを思い出させます。

http://code.google.com/appengine/docs/python/タスクキュー/

これはあなたを助けるかもしれません。

私の非同期オンラインボードゲームのために、私は、選手たちはそれが自分の順番でなかったとき、何が起こったかを見ることができるようにメッセージの履歴が保持されているシステムを実装するつもりです。たまたま各事は一意のIDを取得し、プレイヤーはいずれかのメッセージが送信されるたび、それは彼らが受け取った最新のものを追跡します。彼らが戻ってくるときに、彼らが受け取った最後のメッセージから発生したすべての迅速なアニメーションを見ることができます。

そして私は、私は、クライアントが待機していない間に何かを処理するためにサーバを必要とするポイントに得れば、私はタスクキューを使用します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top