Copy link to clipboard
Copied
I'm making animations with Adobe Animate and importing layers from Photoshop.
Sometimes I've got like 34 or 40 layers and I have to manually do that :
Is there a way to make Animate automatically do that ? (putting each layer after the previous one ?)
Thank you for your help
Hi.
Here is a script that does what you need.
Probably k will give you a most efficient way of doing this, but, for now, I think it can help you.
Feel free to improve it in any way desired.
UPDATE (03/23/2023):
I didn't review the code. Just grabbed it from another folder I have in Google Drive.
var defaultValue = "3";
var space = prompt("Type the pyramid edge width.", defaultValue);
var doc = fl.getDocumentDOM();
var timeline = fl.getDocumentDOM().getTimeline();
var selectedLayers = tim
...
Copy link to clipboard
Copied
yes. you can use jsfl to automate that task.
Copy link to clipboard
Copied
Ok.. Do you have any tutorial how to do that ?
Copy link to clipboard
Copied
i haven't made a tutorial but you could search for one using google: jsfl tutorial
Copy link to clipboard
Copied
Thank you. I've just read this tuto and understood how this is working.
But, as I'm not good at all at Javascript language, do you know how can I tell, in javascript, to add 3 frames to each layers and to put the next layer after the previous one (like in my video) ?
Copy link to clipboard
Copied
Hi.
Here is a script that does what you need.
Probably k will give you a most efficient way of doing this, but, for now, I think it can help you.
Feel free to improve it in any way desired.
UPDATE (03/23/2023):
I didn't review the code. Just grabbed it from another folder I have in Google Drive.
var defaultValue = "3";
var space = prompt("Type the pyramid edge width.", defaultValue);
var doc = fl.getDocumentDOM();
var timeline = fl.getDocumentDOM().getTimeline();
var selectedLayers = timeline.getSelectedLayers();
var count;
var increment;
function start()
{
if (!doc || !selectedLayers || selectedLayers.length == 1 || space == null)
return;
else
{
space = space.replace(/\s/g,'');
if (isNaN(parseFloat(space)) || space <= 0)
return;
else
count = Number(space);
increment = count;
}
for (var i = selectedLayers.length - 1; i >= 0; i--)
{
timeline.setSelectedLayers(selectedLayers[i], true);
timeline.insertFrames(count, false, 0);
timeline.insertKeyframe(count - (increment - 1));
count += increment;
}
}
start();
-----------------------------------------------------------------------------------------------------------------------
JSFL download: layers_pyramid.jsfl - Google Drive
Usage:
Select the layers you want, type in the value of the pyramid's edges or leave the default and press 'OK'.
Code (for reference):
var defaultValue = "3";
var space = prompt("Type the pyramid edge width.", defaultValue);
var doc = fl.getDocumentDOM();
var timeline = fl.getDocumentDOM().getTimeline();
var selectedLayers = timeline.getSelectedLayers();
var count;
var increment;
function start()
{
if (!doc || !selectedLayers || selectedLayers.length == 1 || space == null)
return;
else
{
space = space.replace(/\s/g,'');
if (isNaN(parseFloat(space)) || space <= 0)
return;
else
count = Number(space);
increment = count;
}
for (var i = selectedLayers.length - 1; i >= 0; i--)
{
timeline.setSelectedLayers(selectedLayers, true);
timeline.insertFrames(count, false, 0);
timeline.insertKeyframe(count - (increment - 1));
count += increment;
}
}
start();
Demonstration:
I hope it helps.
Regards,
JC
Copy link to clipboard
Copied
Super thanks for this answer and the code! Unfortunately, I've just tested it but it doesn't seems to work (nothing is happening) :
Copy link to clipboard
Copied
Great!
You have to select the layers first.
Sorry, because I edited my comment and you probably didn't see the update.
Copy link to clipboard
Copied
Here's what's happening when I'm selecting all the layers :
Copy link to clipboard
Copied
Sorry about the inconvenience.
I've updated the script. Please try again.
Now you can apply it to any number of layers.
The only thing that it won't do right now is to remove the contents of the first frames. It seems trivial but it turns out that it isn't.
As soon as I find a solution, I'll get back to you.
Copy link to clipboard
Copied
Little demonstration:
Copy link to clipboard
Copied
GREAT !!! Thank you very much for this ! Awesome !
Copy link to clipboard
Copied
can you send it again
Copy link to clipboard
Copied
Hi.
You can copy the code from the accepted answer (in the comment body itself).
Please let me know if there's some issue.
Regards,
JC
Copy link to clipboard
Copied
line 51,A javascript error occurred
Copy link to clipboard
Copied
Thanks for pointing that out.
This should be the correct code:
var defaultValue = "3";
var space = prompt("Type the pyramid edge width.", defaultValue);
var doc = fl.getDocumentDOM();
var timeline = fl.getDocumentDOM().getTimeline();
var selectedLayers = timeline.getSelectedLayers();
var count;
var increment;
function start()
{
if (!doc || !selectedLayers || selectedLayers.length == 1 || space == null)
return;
else
{
space = space.replace(/\s/g,'');
if (isNaN(parseFloat(space)) || space <= 0)
return;
else
count = Number(space);
increment = count;
}
for (var i = selectedLayers.length - 1; i >= 0; i--)
{
timeline.setSelectedLayers(selectedLayers[i], true);
timeline.insertFrames(count, false, 0);
timeline.insertKeyframe(count - (increment - 1));
count += increment;
}
}
start();
Copy link to clipboard
Copied
Something is happening when I'm selecting only the 4 first layers... :