【问题标题】:Threejs, Keydown should move my player a certain distance but the distance increasesThreejs,Keydown应该将我的播放器移动一定距离,但距离会增加
【发布时间】:2017-01-09 21:27:32
【问题描述】:

我有一个 Threejs 项目,我在我的动画功能中使用 keydown 作为我的玩家角色的控件:'a' 和 'd' 用于左右,'w' 和 's' 用于上下。

当我按住其中一个键时,我的角色移动的距离会随着我按住键的持续时间而增加。 在我松开按键并再次按下后,我的角色现在不断跳跃增加的距离,并且在某些时候它只需按下一个按钮就可以跳过整个屏幕。

这是一个代码sn-p:

   $(document).keydown(function(e){
        if (e.keyCode == 87) {
            player.position.y += 0.05;


        }
        if (e.keyCode == 83) {
            player.position.y -= 0.05;


        }
        if (e.keyCode == 65) {
            player.position.x -= 0.05;


        }
        if (e.keyCode == 68) {
            player.position.x += 0.05;


        }
   });

非常感谢一些帮助:)

【问题讨论】:

  • 无法重现发布代码的问题,但请确保代码只执行一次。如果多次执行,每次按键都会调用多个 keydown 处理程序,结果位置的变化会超出预期。
  • 您在渲染循环中发布的代码是?如果是这样,每次您的渲染循环触发时,它都会添加 另一个 侦听器,从而导致上述评论中解释的内容。

标签: javascript three.js


【解决方案1】:

我认为像这样在渲染循环中移动逻辑会更好

外部渲染循环:

$(document).keydown(function(e){
    if (e.keyCode == 87) {
        movementY = +0.05;
    }
    if (e.keyCode == 83) {
        movementY = 0.05;
    }
    if (e.keyCode == 65) {
        movementX = -0.05;
    }
    if (e.keyCode == 68) {
        movementX = 0.05;
    }
});

$(document).keyup(function(e){
    movementX = 0;
    movementY = 0;
});

内部渲染循环:

player.position.x+=movementX;
player.position.Y+=movementY;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-08
    相关资源
    最近更新 更多