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 называется.

Другие вопросы по тегам