我正在尝试使用 Coffeescript 和 box2dweb 来创建一个简单的游戏。设置物理效果很好并且更新也很好,但是当尝试在更新循环中调用我自己的函数时,我收到此错误“未定义不是函数(评估 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
最佳答案
在initPhysics
中,您需要bind @update
到 this
:
window.setInterval(@update.bind(this), 1000/60)
因为否则当调用 update
时,this
上下文就会丢失。
关于javascript - 评估 'this.batman()' 时,未定义不是一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17689561/