小编Jon*_*ter的帖子

Math.sin() .cos() 的成本 vs 古怪的自己的实现

所以大约一个小时前,我经历了一个美好而尴尬的时刻,在很长一段时间后点击了一些东西。推动 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)

javascript performance trigonometry game-engine

1
推荐指数
1
解决办法
1176
查看次数