Skip to main content
Known Participant
Mar 29, 2023 7:39 AM UTC
Answered

jsfl to be fixed

The following jsfl can only increase or decrease frames for a single frame,
How to increase or decrease frames for selected multiple layers and frames

fl.outputPanel.clear();

var doc = fl.getDocumentDOM();
var tl = doc.getTimeline();

var numFrames = prompt("Enter the number of frames to add or subtract:  ");
numFrames = parseInt(numFrames);
var insFrm = Math.abs(numFrames);
var selectFrame=tl.currentFrame;
if(isNaN(numFrames)){
	alert("please enter a number");
 }else{
	if(numFrames<0){
		tl.removeFrames(selectFrame,selectFrame+insFrm);
	}else{
		tl.insertFrames(insFrm);
	}
	
}
This topic is closed to new replies. Start a new post to keep the conversation going.
Vladin M. Mitov
Vladin M. MitovCorrect answer
Inspiring
Mar 29, 2023 12:55 PM UTC

 

(function(){
	
	var doc = fl.getDocumentDOM();
	var tml = doc.getTimeline();

	main();

	function main(){
		var selection = tml.getSelectedFrames();
		var numFrames = parseInt( prompt( "Enter the number of frames to add or subtract:  " ) );
		if( isNaN( numFrames ) ){
			alert("Please enter a number");
			return;
		}
		var i, l, s, e, insFrm = Math.abs( numFrames );
		
		for( i = 0; i < selection.length; i +=3 ){
			l = selection[i], s = selection[i+1], e = selection[i+2];
			
			if( numFrames < 0 ){
				removeFrames( tml.layers[ l ], l, s, e, insFrm );
			}else{
				addFrames( tml.layers[ l ], l, s, e, insFrm );
			}
		}
		
		tml.setSelectedFrames([], true);		
	}
	function addFrames( xlayer, l, s, e, fn ){
		var f = e;
		while( f > s ){
			f = Math.max( s, getLayerPrevKey( xlayer, f ) );
			tml.setSelectedFrames( [ l, f, f+1 ], true );
			tml.insertFrames( fn );
		}
	}
	function removeFrames( xlayer, l, s, e, fn ){
		var f = e;
		while( f > s ){
			f = Math.max( s, getLayerPrevKey( xlayer, f ) );
			tml.currentLayer = l;
			tml.removeFrames( f+1, f+1+fn );
		}
	}
	function getLayerPrevKey( alayer, sf ){
		if( ! alayer ) return null;
		var fi = ( ( sf - 1 ) < 0 ) ? 0 : sf - 1;
		var fr = alayer.frames[ fi ];
		if( ! fr ) return null;
		return fr.startFrame;
	}

	
})();

 



- Vlad: UX and graphic design, Flash user since 1998Member of Flanimate Power Tools team - extensions for character animation

5 replies

Vladin M. Mitov
Inspiring
Mar 29, 2023 10:49 AM UTC
	main();
	
	function main(){
		
		var doc = fl.getDocumentDOM();
		var tl = doc.getTimeline();
		var numFrames = parseInt( prompt( "Enter the number of frames to add or subtract:  " ) );
		var insFrm = Math.abs( numFrames );
		var currentFrame = tl.currentFrame;
		var selectedlayers = getSelectedLayers( tl );

		if( isNaN( numFrames ) ){
			alert("Please enter a number");
			return;
		}else{
			if( numFrames < 0 ){
				removeFrames( tl, currentFrame, insFrm, selectedlayers );
			}else{
				insertFrames( tl, currentFrame, insFrm, selectedlayers );
			}
		}
		
		tl.setSelectedFrames([], true);
	}
	function getSelectedLayers( tl ){
		var i, retval = [], sel = tl.getSelectedFrames();
		for( i = 0; i < sel.length; i += 3 ){
			retval.push( sel[ i ] );
		}
		return retval;
	}
	function removeFrames( tl, cf, fn, selected ){
		var i;
		for( i = 0; i < selected.length; i++ ){
			tl.currentLayer = selected[ i ];
			tl.removeFrames( cf, cf + fn );
		}	
	}
	function insertFrames( tl, cf, fn, selected ){
		var i;
		for( i = 0; i < selected.length; i++ ){
			tl.currentLayer = selected[ i ];
			tl.setSelectedFrames( [ selected[ i ], cf, cf+1], true );
			tl.insertFrames( fn );
		}		
	}
	

 

 

Translate
- Vlad: UX and graphic design, Flash user since 1998Member of Flanimate Power Tools team - extensions for character animation
kqskcmAuthor
Known Participant
Mar 29, 2023 11:02 AM UTC

It is necessary to increase or decrease frames for multiple frames selected by the box,
At present, only the position of 15 frames can be increased or decreased.

Translate