当按键被按下时响应鼠标移动

5

编辑: 看起来问题是触摸板而不是鼠标。

目标: 即使按下键(s),也能响应鼠标移动。

我想修改Three.js的PointerLockControls,以便:如果用户在按下W时移动鼠标,则相机应继续向前移动,并且相机的方向也应根据鼠标移动而改变。 在正常情况下,这种情况并不会发生。以下是监听器:

mousemove事件的监听器:

var onMouseMove = function ( event ) {
    var movementX = event.movementX || event.mozMovementX || event.webkitMovementX || 0;
    camera.rotation.y-=movementX*0.002;
  };

按键按下事件的监听器:

var onKeyDown = function ( event ) {
    
        case 38: // up
        case 87: // w
            moveForward = true;
            break;
        //keys: a, s, d are handled similarly

        case 32: // space
            if ( canJump === true ) velocity.y += 10;
            canJump = false;
            break;
   }

键盘按键抬起事件监听器:

var onKeyUp = function(event){
        case 38: // up
        case 87: // w
            moveForward = false;
            break;
}

我发现,如果我按下W键时,再按下空格键,那么玩家将继续向前移动并响应鼠标移动。这是我想要的效果(但即使没有按下空格键也应该正常工作)。


不,我的触摸板和鼠标的行为一样。 - gaitat
这真的很奇怪。我应该采取什么措施来解决这个问题? - coolscitist
1
调试。从原始的PointerLockControls.js文件开始,确保在onMouseMove()调用中,movementX和movementY的值确实被修改了。要检查的另一个变量是速度(velocity)。 - gaitat
当按下键盘时,mousemove事件不会被触发或者至少没有被“监听”。预期情况下,当按下“w”键时,速度会改变,无论鼠标是否移动。 - coolscitist
抱歉,我不知道该怎么告诉你。我刚在我的笔记本电脑上验证了它,使用Firefox和Chrome(最新版本)与three.js r57都可以正常工作。也许你可以将其发布为一个问题,提交到https://github.com/mrdoob/three.js/issues。 - gaitat
显示剩余3条评论
1个回答

2

通常操作系统会在打字时禁用触摸板。您应该能够在操作系统设置中找到切换此功能的选项。


在Windows 7中禁用触摸板的“触摸检查”选项后,它可以正常工作。非常感谢。 - coolscitist

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接