所以大约一个小时前,我经历了一个美好而尴尬的时刻,在很长一段时间后点击了一些东西。推动 30 我终于得到了窦和余弦。在一个只能被描述为基本上重新实现轮子的插曲之后。
为了让 WASD 控件在两个轴上移动,考虑到玩家的视线方向,我决定使用一个简单的开关:
switch (key) {
case 'up':
movement.z -= 1 * modulation.z;
movement.x += 1 * modulation.x;
break;
case 'down':
movement.z += 1 * modulation.z;
movement.x -= 1 * modulation.x;
break;
case 'left':
movement.x -= 1 * modulation.z;
movement.z -= 1 * modulation.x;
break;
case 'right':
movement.x += 1 * modulation.z;
movement.z += 1 * modulation.x;
break;
...
}
Run Code Online (Sandbox Code Playgroud)
...其中调制.z 和.x 将基于玩家面对的方向。调制值需要在 -1 到 +1 的范围内。(这应该是我的第一个线索,是的!)所以我帮自己拿了一些可靠的笔和纸,并且对我 9 年级的教育一无所知,我想出了:
function setModulation(rotation) {
var rotationTemp = 0;
var …Run Code Online (Sandbox Code Playgroud)