如果有人有興趣的解決方案:
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,因爲角度可以大於或小於旋轉角度(它使用負角和東西太...很奇怪)。 –