瀏覽代碼

Animation: Looping currentTime directly. Fixes issue in #4377.

Mr.doob 11 年之前
父節點
當前提交
0b45f03ac3

+ 5 - 6
src/extras/animation/Animation.js

@@ -114,15 +114,14 @@ THREE.Animation.prototype.update = function ( delta ) {
 	var types = [ "pos", "rot", "scl" ];
 
 	var duration = this.data.length;
-	var currentTime = this.currentTime;
 
 	if ( this.loop === true ) {
 
-		currentTime %= duration;
+		this.currentTime %= duration;
 
 	}
 
-	currentTime = Math.min( currentTime, duration );
+	this.currentTime = Math.min( this.currentTime, duration );
 
 	for ( var h = 0, hl = this.hierarchy.length; h < hl; h ++ ) {
 
@@ -139,12 +138,12 @@ THREE.Animation.prototype.update = function ( delta ) {
 			var prevKey = animationCache.prevKey[ type ];
 			var nextKey = animationCache.nextKey[ type ];
 
-			if ( nextKey.time <= currentTime ) {
+			if ( nextKey.time <= this.currentTime ) {
 
 				prevKey = this.data.hierarchy[ h ].keys[ 0 ];
 				nextKey = this.getNextKeyWith( type, h, 1 );
 
-				while ( nextKey.time < currentTime && nextKey.index > prevKey.index ) {
+				while ( nextKey.time < this.currentTime && nextKey.index > prevKey.index ) {
 
 					prevKey = nextKey;
 					nextKey = this.getNextKeyWith( type, h, nextKey.index + 1 );
@@ -159,7 +158,7 @@ THREE.Animation.prototype.update = function ( delta ) {
 			object.matrixAutoUpdate = true;
 			object.matrixWorldNeedsUpdate = true;
 
-			var scale = ( currentTime - prevKey.time ) / ( nextKey.time - prevKey.time );
+			var scale = ( this.currentTime - prevKey.time ) / ( nextKey.time - prevKey.time );
 
 			var prevXYZ = prevKey[ type ];
 			var nextXYZ = nextKey[ type ];

+ 6 - 7
src/extras/animation/KeyFrameAnimation.js

@@ -177,15 +177,14 @@ THREE.KeyFrameAnimation.prototype.update = function ( delta ) {
 	//
 
 	var duration = this.data.length;
-	var currentTime = this.currentTime;
 
 	if ( this.loop === true ) {
 
-		currentTime %= duration;
+		this.currentTime %= duration;
 
 	}
 
-	currentTime = Math.min( currentTime, duration );
+	this.currentTime = Math.min( this.currentTime, duration );
 
 	for ( var h = 0, hl = this.hierarchy.length; h < hl; h++ ) {
 
@@ -201,9 +200,9 @@ THREE.KeyFrameAnimation.prototype.update = function ( delta ) {
 			var prevKey = animationCache.prevKey;
 			var nextKey = animationCache.nextKey;
 
-			if ( nextKey.time <= currentTime ) {
+			if ( nextKey.time <= this.currentTime ) {
 
-				while ( nextKey.time < currentTime && nextKey.index > prevKey.index ) {
+				while ( nextKey.time < this.currentTime && nextKey.index > prevKey.index ) {
 
 					prevKey = nextKey;
 					nextKey = keys[ prevKey.index + 1 ];
@@ -215,9 +214,9 @@ THREE.KeyFrameAnimation.prototype.update = function ( delta ) {
 
 			}
 
-			if ( nextKey.time >= currentTime ) {
+			if ( nextKey.time >= this.currentTime ) {
 
-				prevKey.interpolate( nextKey, currentTime );
+				prevKey.interpolate( nextKey, this.currentTime );
 
 			} else {
 

+ 5 - 5
src/extras/animation/MorphAnimation.js

@@ -38,16 +38,16 @@ THREE.MorphAnimation.prototype = {
 
 			this.currentTime += delta;
 
-			var currentTime = this.currentTime;
-
 			if ( this.loop === true ) {
 
-				currentTime %= this.duration;
+				this.currentTime %= this.duration;
 
 			}
 
+			this.currentTime = Math.min( this.currentTime, duration );
+
 			var interpolation = this.duration / this.frames;
-			var frame = Math.floor( currentTime / interpolation );
+			var frame = Math.floor( this.currentTime / interpolation );
 
 			if ( frame != currentFrame ) {
 
@@ -60,7 +60,7 @@ THREE.MorphAnimation.prototype = {
 
 			}
 
-			this.mesh.morphTargetInfluences[ frame ] = ( currentTime % interpolation ) / interpolation;
+			this.mesh.morphTargetInfluences[ frame ] = ( this.currentTime % interpolation ) / interpolation;
 			this.mesh.morphTargetInfluences[ lastFrame ] = 1 - this.mesh.morphTargetInfluences[ frame ];
 
 		}