【发布时间】:2014-11-12 00:19:17
【问题描述】:
我正在 HTML5 中构建一个应用程序,使用 CreateJS (EaselJS)、Box2D 并使用 Browserify 用 CoffeeScript 编写(使用 Gulp 构建)。
我刚刚花了半天的时间在键盘上敲打我的头,试图弄清楚为什么我的 EaselJS 事件无法正常工作。窗口/文档事件很好。任何和所有 EaselJS 事件都没有做任何事情。事实证明,调试画布将它们困住,以不可见的方式覆盖。
我最终通过打开和关闭调试画布意外发现了这一点,它允许事件通过并开始响应。
所以现在,我的问题是:处理事件的最佳方式是什么,以便它们能够正常工作
a) 无需我先切换调试画布,以及
b) 当调试处于活动状态时,如何将事件传递到下面的主画布以便它可以处理它们?
这可能吗?理想的情况是,即使启用了调试绘图,mouseevents 也能正常工作。
HTML 是这样的:
<body>
<canvas id="arcade"></canvas>
<canvas id="debug"></canvas>
<button id="toggle-debug">Toggle Debug</button>
<script src="compiled.js"></script>
</body>
我的应用程序类设置了从其构造函数调用 bindEvents 的事件:
bindEvents: =>
# Pause when window is blurred
window.addEventListener 'blur', @setPaused
# Play when window is focused
window.addEventListener 'focus', @setPlay
# Toggle showing/hiding of the Debug <canvas>
document.getElementById('toggle-debug').onclick = @toggleDebug
toggleDebug: =>
@showDebug = !@showDebug
# Shows/hides Debug canvas
Universe.debug.canvas.style.display = (if @showDebug then 'block' else 'none')
setPlay: =>
@play = true
createjs.Ticker.setPaused false
setPaused: =>
@play = false
createjs.Ticker.setPaused true
我的对象(在@body 中包含box2d body,在@view 中包含easelJS 显示对象)以类似的方法设置它们的事件,例如
bindEvents: ->
@view.on "click", () => alert("ball #{@options.id} clicked")
【问题讨论】:
标签: html events canvas coffeescript easeljs