I've moved to a UI programmer position in a games company and I'm unused to Flash, though I used it a tiny bit back in the day to experiment with making games.
I've inherited a bunch of flash files and would like to explore what's in them, but it seems like I can't do that, so I'm interested in what I'm misunderstanding, or not aware of, and also interested in ways to fix it.
Here's what I think I know.
- A flash file has a library, which is a set of user-defined archetypes.
- There is also a scene, which seems to be recreated when opening a movieclip from the library for examination.
- Movieclips can have children.
- Looking at the timeline there are layers. These don't correspond to child movieclips but can own them in some ways, allowing you to hide/lock them.
- There used to be a pane called "Movie Explorer" or something, in Flash, that got deprecated when they made Animate.
- No substitute was made for the removal of this feature.
- There is currently no way to see explicitly what child movieclips a given movieclip might have, apart from visually.
- Selecting child movieclips that are invisible therefore becomes a guessing game of double clicking where they might be or dragging boxes over the scene view.
It seems to me that I will need to make an extension to display the movieclip hierarchy. Would that be correct?
Investigating that last line of thought shows that extensions for this software used to be written themselves in Flash (Extension Builder 2.1), but are now based on HTML 5 (Extension builder 3).
Is that all correct?
If there's anyone that can help, I'd be really grateful. Info on these subjects seems to be quite distributed and old and rare.
investigating a fla file can be, and often is, painful. you can automate the procedure by using jsfl which is still created using animate.
p.s. unless these are online games that need to be converted from swf to html5, i'm not sure there's a good reason to invest any time in checking the fla files.
Thanks! Yeah we are looking at jsfl to help, maybe just to output a map of a library movieclip's hierarchy.
I'm getting the hang of it a bit more now, using locking and visibility controls to ensure the right things are visible/selected.
We're using scaleform so it's important that certain child instances are given the right names and so forth. But if you don't know what's in there to begin with... well, you can see the problem.
Hello! Also at a game company here! And we are also looking at using Animate. In our case because we are evaluating Coherent Labs's Prysm product which is recommending/using Adobe Animate as the content creation toolset.
I'm hitting the same obstacle as you where I'm going slightly insane trying to understand the hierarchy of movie clips inside of some of their samples, (or even within my own creations!), because of the lack of any kind of high level tree view. I'm mostly just madly clicking on things, but it's never too clear which visual elements represent distinct children under the current Movie Clip. It seems like a severe hindrance to productivity in this tool.
Did you find a solution for this? Is there a 3rd party tree viewer or a way to make a plugin to expose it?
Hello, sorry for the delay. No, I did not find a solution. I find what's in a file or library object by locking all layers, and unlocking each layer one by one and doing a select all or switching to outline view (the little block next to the lock icon) to see what's in there and then examining each object in the object properties. It is long and laborious and error prone and relies on tidy and well designed flash content.
If using Action Script 3 you can instrospect the entire SWF using flash.utils.describeType
It returns an XML document of the entire Tree
Nope, not using Action Script 3. I don't even know how Actionscript fits in to the picture. In my case Coherent Labs provides a custom exporter and document type, so I'm choosing their document type rather than the "Actionscript 3" template when creating a new document. Maybe I can still do similar things though.
If I were using Action Script 3, where would I "use" flash.utils.dsecribeType. Is there some interactive window within Animate where one types actionscript, like a REPL?
I was really hoping for something that was a bit better than just a way to write code that would list everything in the hierarchy. I was hoping that there would be a tool or a plugin which would add the missing tree-view pane of the hierarchy, and it would be an interactive pane which would allow you to navigate the scene, e.g. click on a node in the tree view to select it in the scene.
what is file type you have right now? like the extension of the file
it's a .fla, same as it would be if I create an ActionScript 3 document. The Coherent plugin creates a different document template type that you use from File-->New, but it's still a .fla. I'm not sure in what ways it differs from the ActionScript template exactly, except that they have a custom exporter tool which is disabled unless you create the document using their template.
If the CC Animate GUI does not give you a way to do this, the only way I can think of is to programmatically do this with JSFL (Maninulate the FLA content and traverse the children)
or with flash.utils.describeType on the .swf ( the compiled version of the .fla file)
some JSFL scrip examples
Thanks for pointing me to the JSFL examples. Looking through the descriptions there, the closest things there to what I wanted appeared to be the two "Log Instance Names" scripts. I installed these and ran them but I was underwhelmed. They seemed to only list the immediately children of the current movie clip that I was inside of. Movie clips seem to be the basic building block of Animate, and I'm dealing with screens which have Movie Clips inside of Movie Clips inside of Movie Clips, nested down to like 8-10 levels of depth, because they are complex layouts made for games, of screens which have a lot of moving nested parts.
What I really want is something that will let me see the entire hierarchy of what is within all the Movie clips down to the leaves at the bottom.
Maybe JSFL has that capability even though this collection of scripts does not have what I need. I found it strange though, that when I started to try to research JSFL I only found mirrors of old documentation on russian websites or people's google drive's where they appear to have a mini-museum of archaic information that Adobe has disowned and is now trying to censor. At least, that is my reading of the situation.
Has Adobe abandoned JSFL? Is there some newer, better replacement? Or are they just actively discouraging people from trying to extend their products?
jsfl can iteratively loop through all movieclips including nested movieclips. and adobe still supports jsfl.
Here is the most up-to-date JSFL documentation
They are not discouraging development. Things are just messy and somehow out of control.
That's great, thanks for the pointers to the JSFL docs. I've managed to cobble something together to recursively explore the structures loosely based on the "Log Instance Names" example I mentioned earlier. It was a bit more convoluted than I had hoped and the output is not pretty.
I'm iterating through the document --> layers --> frames --> elements and I find an element which has elem.symbolType=="movie clip". I can follow elem.libraryItem and print the name of that (which is a name of at item in the library). The libraryItem has a timeline itself, which I then recurse on.
It's given me a bit more understanding of the internals and how the simple hierarchy view that I had imagined might not be a practical reality. By the looks of these structures, by virtue of the element lists being hung off the Frame, it seems open to the possibility of each frame having a completely different collection of elements. And the more nested of movie clips that I have, the more different timelines there are to traverse. Currently the output of my script iterates all the frames and produces a lot of redundant output, so it would take a fair bit of work to somehow coalesce all the redundancies back into a coherent picture of what is present.
there's no reason you should have any duplicate info.
create a function that accepts a movieclip (mc). with that mc iterate through its frames > layers > elements. if an element is a mc, pass to that function.
start by calling that function and pass the main (root).
Yeah I thought about usin this or jsfl or extension builder or whatnot to make a new file inspector but decided it would not be the finest use of company time!
if you (or your company) is interested in hiring me to do this for you, send me a private message.