2次元グリッドを移動する補強エージェントを視覚化しようとしています。私はキャンバスを使用して視覚化をコーディングし、エージェントが移動するたびにグリッドを更新しようとします。私はアニメーションを見たいと思っていましたが、代わりにエージェントがこのすべての動作を完了して最終状態を見るまで何も見ません。 Google Chromesデベロッパーツールを使用すると、個別の手順を確認できます。私のコードが速く走っているのは問題ではないと思う。各ステップには数秒かかります。キャンバス要素が更新されない
私の実装は次のとおりです。gridWorld()
は新しいオブジェクトを作成するために一度呼び出され、描画するたびに呼び出されるのはexecuteAction
です。示されているように私はctx.save()
とctx.restore()
を使用しましたが、これはこの問題を解決するための試みにすぎず、違いはありませんでした。コードの実行に時間がかかる場合であっても、コードの実際のブレークがあるまで
おかげ
var execute gridWorld = function(action) {
var canvas = document.getElementById("grid");
this.ctx = canvas.getContext("2d");
this.executeAction = function(action) {
this.ctx.save()
// ... Do reinforcement learning stuff
// For every cell in grid, do:
this.ctx.fillStyle = "rgb(244,0,0)"
this.ctx.fillRect(positionX, poisitonY, 10,10)
this.ctx.restore();
}
}
ありがとうございますが、私はこれをどのように処理するかについては不明です。私の実行アクション関数では、描画コードをsetTimeout(draw、15)に置き換えました。しかしdraw関数は15ミリ秒後に呼び出されないように思われますが、メインコードの実行が終了した後に呼び出されます(前と同じ問題)。また、描画コードはエージェントの状態に依存しますが、順序外に呼び出された場合、どのようにこの状態になるのかを確認するにはどうすればよいですか? – zenna
'[最初のフレームを描画するコードを実行する] [待機] [2番目のフレームを描画するコードを実行する] [wait]' etc ...前のフレームは次のフレームを描画する関数で 'setTimeout'を使う必要があります。コードがフレーム単位で設定されていない場合は、変更する必要があります。 –