Javascript 碰撞不是';无法使用touchstart事件识别

Javascript 碰撞不是';无法使用touchstart事件识别,javascript,touch,html5-canvas,Javascript,Touch,Html5 Canvas,我正在使用“基于JavaScript的HTML5动画基础”一书中的示例创建一个支持触摸的游戏。该书中的一个示例显示了基本的触摸功能,但并不完全有效。下面是该示例的链接 根据下面的功能,如果你触摸球内的画布,它应该记录消息“in ball:touchstart”,但是我还没有让它工作。当你移动到球内时,它会识别球,但由于某种原因,它不会识别第一次触摸 如果我将代码更改为使用鼠标侦听器,它将按预期工作 canvas.addEventListener('touchstart', function (e

我正在使用“基于JavaScript的HTML5动画基础”一书中的示例创建一个支持触摸的游戏。该书中的一个示例显示了基本的触摸功能,但并不完全有效。下面是该示例的链接

根据下面的功能,如果你触摸球内的画布,它应该记录消息“in ball:touchstart”,但是我还没有让它工作。当你移动到球内时,它会识别球,但由于某种原因,它不会识别第一次触摸

如果我将代码更改为使用鼠标侦听器,它将按预期工作

canvas.addEventListener('touchstart', function (event) {
    event.preventDefault();
    if (utils.containsPoint(ball.getBounds(), touch.x, touch.y)) {
      log.value = "in ball: touchstart";
    } else {
      log.value = "canvas: touchstart";
    }
  }, false);
如果对球发射“touchstart”,则
touch.x
touch.y
是未定义的,因此您无法识别球上的触球。您可以在touchmove事件中跟踪
touch.x
touch.y
,这就是您在移动时识别触球的原因


编辑:您可以通过在第88-91行的touchstart事件中设置
touch.x
touch.y
来解决此问题。是否尝试在桌面浏览器中运行此操作?触摸屏设备(如手机)上会触发触摸事件。我正在手机上测试。对不起,我应该提到它需要在移动设备或模拟器上测试。
 element.addEventListener('touchstart', function (event) {
    touch.isPressed = true;
    touch.event = event;
}, false);