如果有人有兴趣的解决方案:
var rotationSpeed:Number = 60;
var startAngle:Number = (angle < 0) ? (angle + 360) % 360:angle % 360;
var endAngle:Number = (wheelObj.rotation < 0) ? (wheelObj.rotation + 360) % 360:wheelObj.rotation % 360;
var distance:Number = (Math.max(startAngle,endAngle) - Math.min(startAngle,endAngle) > (360 + Math.min(startAngle,endAngle))- Math.max(startAngle,endAngle)) ? (360 + Math.min(startAngle,endAngle))- Math.max(startAngle,endAngle) : Math.max(startAngle,endAngle) - Math.min(startAngle,endAngle);
var time:Number = distance/rotationSpeed;
TweenLite.to(wheelObj, time, {shortRotation:{rotation:angle}, ease:Expo.easeOut, onComplete:rotateWheel, onCompleteParams:[target]});
TweenLite.to(carObj, time, {shortRotation:{rotation:angle}, ease:Expo.easeOut});
下面的算法:
var distance:Number = (Math.max(startAngle,endAngle) - Math.min(startAngle,endAngle) > (360 + Math.min(startAngle,endAngle))- Math.max(startAngle,endAngle)) ? (360 + Math.min(startAngle,endAngle))- Math.max(startAngle,endAngle) : Math.max(startAngle,endAngle) - Math.min(startAngle,endAngle);
比较的最大角度 - 最小角度到最小角度+ 360个减最大的角度,并看到哪一个更大,并将自己定为答案。例如,
20和320
320 - 20 = 300 (20 + 360) - 320 = 40
这适用于任何两个角度(0和360之间),并总能找到最短路径。
我并没有真正得到你的第一行 - 但你为什么不做一个'var time =(angle-wheelObj.rotation)* timePerDegree'? – pkyeck
@pkyeck,因为角度可以大于或小于旋转角度(它使用负角和东西太...很奇怪)。 –