Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将玩家移向鼠标方向?_Javascript_Babylonjs - Fatal编程技术网

Javascript 将玩家移向鼠标方向?

Javascript 将玩家移向鼠标方向?,javascript,babylonjs,Javascript,Babylonjs,我正在寻找一行简单的代码或API,如果它像那样简单的话 我正在使用BabylonJS制作一个在线游戏,我遇到了一个问题。我在文档中找不到任何支持我的问题的东西。我正在使用 canvas.requestPointerLock = canvas.requestPointerLock || canvas.mozRequestPointerLock; canvas.requestPointerLock(); 要锁定鼠标,通常必须单击并拖动鼠标。我还将此动作脚本用于基本动作: function

我正在寻找一行简单的代码或API,如果它像那样简单的话

我正在使用BabylonJS制作一个在线游戏,我遇到了一个问题。我在文档中找不到任何支持我的问题的东西。我正在使用

canvas.requestPointerLock = canvas.requestPointerLock || canvas.mozRequestPointerLock;
    canvas.requestPointerLock();
要锁定鼠标,通常必须单击并拖动鼠标。我还将此动作脚本用于基本动作:

function KEY_DOWN(event)
{
    if (event.keyCode == 87)
    {
        player.position.z -= 0.5;
    }
    else if (event.keyCode == 65)
    {
        player.position.x += 0.5;
    }
    else if (event.keyCode == 83)
    {
        player.position.z += 0.5;
    }
    else if (event.keyCode == 68)
    {
        player.position.x -= 0.5;
    }
}

不幸的是,这仅在轴上进行变换。有没有办法确定我的鼠标在看什么,朝着那个点移动,而不仅仅是在一个固定的轴上移动?我似乎找不到任何有我需要的确切方法的东西。谢谢

我不知道任何API,但如果我正确理解您的问题,它应该不会那么糟糕。在点被锁定后,您需要钩住mousemove事件,而不是像这里所示的简单处理:您需要使用该处理程序中的键对每个可能的移动向量进行向量计算。实际上,您可以基于鼠标增量计算pointerlockchange处理程序中每个按键对应的x、y、z增量。可能没有听起来那么糟糕,因为您的鼠标增量一次最多只影响2个轴。

为了进一步说明我的意思,我在这里放了一个我认为会有帮助的示例。不幸的是,我不能使用jsfiddle,因为它的iframe阻止指针锁。这里是我的示例,它将指针锁定的x/y鼠标移动转换为可以映射到箭头键的规范化向量。根据您的场景,您可能需要翻转、更改旋转轴等。基本上,您需要决定锁定指针移动围绕哪两个轴旋转(我的示例假设X鼠标移动绕Y轴旋转,Y鼠标移动绕X轴旋转,这是非常典型的)。接下来,您需要确定箭头键构成的移动,在我的例子中,箭头键转换为“向前”,依此类推(同样,非常典型)一旦做出了这些决定,就可以用通常的三角学方法得到四个“方向”的方向和大小。我找到了一些至少10年前我为旋转星场所使用的javascript。我引入了一些代码,在上面的示例上创建了一个变体,它专门展示了一种实现您要求的方法。在示例中,您“看”上/下,左/右使用指针锁定机制,并可以使用箭头键移动。它很笨重,一次只能朝一个方向移动,旋转似乎有点麻烦,但它工作得很好,足以表明这个想法:采纳了您的建议,并得到了解决。谢谢!