在评估'this.batman()'时,undefined不是函数

时间:2013-07-17 01:20:08

标签: javascript coffeescript box2dweb

我正在尝试使用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 个答案:

答案 0 :(得分:1)

initPhysics,您需要bind @updatethis

window.setInterval(@update.bind(this), 1000 / 60)

因为否则this上下文在调用update时会丢失。