我試圖通過2D網格看到增強劑。我使用畫布編寫了一個可視化文件,每次我的代理人都會嘗試更新網格。我希望看到一個動畫,但直到代理完成所有這些動作,我纔看到什麼,我看到最後的狀態。如果我使用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
'[執行代碼繪製第一幀] [等待] [執行代碼繪製第二幀] [等待]等等......前一幀需要在繪製下一幀的函數上使用'setTimeout'。如果你的代碼不是通過框架設置的,那麼你需要改變它。 –