2011-09-20 18 views
0

ここで正しいゲームコーディング規約に従っていないと確信していますが、私が行っているように非常に多くのことを学んでいます。

参考URL:http://www.rustyeight.com/game

私はスプライトベースの地図レンダリングエンジンの一部として使用していJSONフィードを持っています。 JQueryの$ .getJSONメソッドを使用して、フィード(maps.js)から情報を取り出し、その内容で配列を埋めます。

次に、この関数をdraw関数で呼び出します。

function draw(ctx){ 
    map(ctx); 
    makeMan(ctx); 
} 

私はそれが奇妙な私は、私はそれらにアクセスしようとしたとき、配列のすべての項目が未定義として出てくるだろう、$ .getJSON関数内で配列を宣言していないことがわかりました。だから、私は変数呼び出しと他のすべてのプロセスを関数に移したところ、うまくいくように見えました。

また、オブジェクトから文字データを描画する関数もあります。

ここで問題になっているのは、makeMan()関数の呼び出しが場所であっても、文字は常にマップの下にレンダリングされるということです。この問題は、json呼び出しの外でマップ配列にアクセスできないという事実に基づいていると感じています。また、描画関数を呼び出すたびにコンテキストを関数に強制しなければならないのは本当に非効率です。

コードについては、上のリンクを参照してください。明確化が必要な場合はお知らせください。私はここに私の髪を引っ張っている!

+0

そのページで行われた唯一の呼び出しは、(有効な)JSONオブジェクトを返す 'http:// www.rustyeight.com/game/maps.js'です。別の呼び出しが行われるべきか? – Bojangles

+0

最終的にキャラクターの別の呼び出しがあります。 character.js JSONファイル(含まれていない)を文字情報のフラットファイルストレージメソッドとして使用します。 – RustyEight

答えて

1

map()関数はAJAXを使用しているため、非同期になります。したがって、ブラウザはHTTPリクエストを実行していない間に、スクリプトの残りの部分を移動して実行します。この場合、それは人間をレンダリングする。

何が起こっているのかは、スクリプト全体が実行され、その人がレンダリングされ、次にhttpRequestが完了し、マップが彼の上にレンダリングされます。

AJAX呼び出しの後にmakeMan()を呼び出すか、完了すると実行するコールバック関数を指定するか、マップAJAX関数の最後にインライン化するだけです。

そして、ちょうどあなたが必要としているjQuery.whenを思い出しました。

+0

それ以上の優雅さはありませんか?とてもうんざりだと思う。 – RustyEight

+0

確かに、イベントプーリングを使用して更新をトリガーしたり、オブザーバーを作成したり、jQuery遅延オブジェクト(http://api.jquery.com/category/deferred-object/)を使用することができます。 –

+0

すごく、ありがとう。 – RustyEight

関連する問題