Я пытаюсь визуализировать усиливающий агент, перемещающийся по 2-й сетке. Я закодировал визуализацию с использованием холста, и каждый раз, когда мой агент делает ход, я пытаюсь обновить сетку. Я надеялся увидеть анимацию, но вместо этого я ничего не вижу, пока агент не завершил все эти шаги, и я вижу конечное состояние. Если я перейду с помощью инструментов Google Chromes Developer, я увижу отдельные шаги. Я не думаю, что проблема в том, что мой код работает быстро, потому что каждый шаг занимает пару секунд.Элемент холста не обновляется
Моя реализация такова, что функция 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
'[выполнить код для рисования первого кадра] [wait] [выполнить код для рисования второго кадра] [wait]' и т. Д. Предыдущий кадр должен использовать 'setTimeout' для функции, которая рисует следующий кадр. Если ваш код не настроен по кадру, вам необходимо изменить его так, как есть. –