我试图通过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'。如果你的代码不是通过框架设置的,那么你需要改变它。 –