undefined не является функцией при оценке this.batman()
Я пытаюсь использовать coffeescript с box2dweb для создания простой игры. Настройка физики работает нормально и обновляется нормально, но когда дело доходит до попытки вызова моих собственных функций в цикле обновления, я получаю эту ошибку 'undefined не является функцией (оценка this.batman()
)' (batman
будучи именем функции). Я компилирую в javascript перед запуском. Это мой первый раз, когда я использую coffeescript, поэтому я могу делать что-то глупое.
Вот мой код:
root = exports ? this
root.world = null
class Game
class Game
canvasHeight: 450
canvasWidth: 800
canvas: null
drawingContext: null
constructor: ->
@createCanvas()
@resizeCanvas()
@createDrawingContext()
@initPhysics()
createCanvas: ->
@canvas = document.createElement 'canvas'
document.body.appendChild @canvas
resizeCanvas: ->
@canvas.height = @canvasHeight
@canvas.width = @canvasWidth
createDrawingContext: ->
@drawingContext = @canvas.getContext '2d'
initPhysics: ->
#physics setup removed for brevity
window.setInterval(@update, 1000 / 60)
batman: ->
alert "whatever"
update: ->
root.world.Step(1 / 60, 10, 10)
root.world.DrawDebugData()
root.world.ClearForces()
@batman()
window.Game = Game
1 ответ
Решение
В initPhysics
нужно связать @update
в this
:
window.setInterval(@update.bind(this), 1000 / 60)
потому что иначе this
контекст теряется, когда update
называется.