我以前在其他系统(2D,而不是 Three.js)中做过类似的事情,基本上你想做的就是逐渐增加角度,直到你达到足够接近目标角度的东西。通常这意味着浮动小于您增加的转动速度(因此您不会“超出”该值)。
增量的大小取决于您希望它们转动的速度。
您还想根据您是接近 360 度还是 0 度来检查增加或减少角度(顺时针还是逆时针转动)是否更好。这可以防止汽车“长距离”转动。您可以通过查看差异是否大于/小于 180 来发现这一点。
我们可以使用模数运算符来获得 -360/360 之间的“真实”角度。
var currentAngle = car.mesh.rotation.y * 180 / Math.PI; //car's angle in degrees
var targetAngle = 90; //preferred angle *this time* ;)
var turningSpeed = 1; //one degree per update (wayyy to high for real stuff, usually)
currentAngle = currentAngle % 360; //get the 0-360 remainder
if ( Math.abs(targetAngle - currentAngle) >= turningSpeed) {
var addto = 0
if (targetAngle - currentAngle < 0) {
addto = 360
}
if ( targetAngle - currentAngle + addto <= 180 ) {
currentAngle += turningSpeed;
}
else {
currentAngle -= turningSpeed;
}
}
else { currentAngle = targetAngle; } //we're close enough to just set it
car.mesh.rotation.y = ( currentAngle * Math.PI ) / 180; // back to radians!