if ( upDownMovement == true) {
SELECTED.position.y = mouse.y * scale;
}
这是我实现垂直运动控制的天真方式(仅在 Y 中直接向上和向下)。然而,它有一个严重的问题。由于初始鼠标位置与模型原始位置不连续,因此在移动开始时始终存在"跳跃"。
实现此控件的正确方法是什么?(如果有一个图书馆做得很好,我很想看到它。
我在想类似 SELECTED.position.y= SELECTED.position.y + mouse.y * scale; 但我可能错了。
据我了解,您应该获得初始鼠标位置(当upDownMovement
变为真时)并将其用作参考。类似的东西
if (upDownMovement == true) {
mouse_y_reference = mouse_y_reference || mouse.y;
SELECTED.position.y += (mouse.y - mouse_y_reference) * scale;
} else {
mouse_y_reference = null;
}
如果你想要更流畅的东西,你可以使用动画库,如补间.js,做一些类似的事情。
mouse_y_reference = mouse_y_reference || mouse.y; // must be declared in a higher scope
var toY = SELECTED.position.y + (mouse.y - mouse_y_reference) * scale;
new TWEEN.Tween(SELECTED.position)
.to({ y: toY }, 100) // adjust the duration here
.easing( TWEEN.Easing.Elastic.InOut )
.onComplete(function() {
mouse_y_reference = null;
})
.start();