0

我有一个现有的 javascript 游戏,我正在尝试使用 SoundJS 添加声音。我遇到的问题是,当玩家在屏幕上移动手指时阻止 iphone 拖动窗口的代码行也会导致所有声音都无法播放。如果我注释掉那一行(“e.preventDefault();”),声音效果很好,但游戏无法播放。有没有其他人遇到过这个?这是获取鼠标坐标的完整函数:

function mouse_move (finger, e)
  {
  if (!e) var e = event;
  if (finger == true) e.preventDefault();

  main_target_x = e.pageX - canvas_html.offsetLeft;
  main_target_y = e.pageY - canvas_html.offsetTop;
  }
4

2 回答 2

0

问题解决了。

我找到了一种稍微替代的方法来防止屏幕拖动,这似乎不会干扰声音。我的事件处理程序:

canvas_html.addEventListener   ("mousedown",   function() {mouse_down (false)}, false);
canvas_html.addEventListener   ("mousemove",   function() {mouse_move (false)}, false);
canvas_html.addEventListener   ("touchstart",  function() {mouse_down (true)},  false);
canvas_html.addEventListener   ("touchmove",   function() {mouse_move (true)},  true);
canvas_html.addEventListener   ("touchend",    function() {mouse_up (true)},    false);
document.body.addEventListener ("mouseup",     function() {mouse_up (false)},   false);
document.body.addEventListener ("touchcancel", function() {mouse_up (true)},    false);
document.body.addEventListener ('touchmove',   function (event) {event.preventDefault()}, false);

我在 mouse_move() 函数中注释掉了“preventDefault”,并在列表末尾为“touchmove”添加了一个新的事件处理程序,只是为了处理“preventDefault”。

这只是一个疯狂的猜测,我不完全确定为什么它以这种方式工作而不是另一种方式。但是,它确实有效,而且我现在既有声音又有稳定的屏幕。

于 2014-05-10T16:43:33.877 回答
0

谢谢你的问题。我以前没有见过这种行为,而且它真的没有意义,因为 SoundJS 对 mouse_move 事件没有做任何事情。我最好的猜测是 preventDefault 以某种方式应用于所有事件。

如果您可以拼凑一个最小的峰值来证明这个问题的实际效果,我将尝试进一步研究它。

希望有帮助。

于 2014-05-05T15:56:37.867 回答