ActionScript 3.0 :: Dynamically Detecting All References To Objects?
Feb 19, 2011
Having grown tired of dealing with uncollected objects mucking up my game level/performance management, I've decided to make a dedicated garbage class which will hold arrays populated by all the strong references I make. I can then just null out/removeChild/removeListener all the contents of these arrays whenever I need to ensure GC will pick up certain objects.What I'd like to know is the following: is there any way within AS3 (or community made AS3 libs) to detect all current references/listeners/etc. that might keep any given object from being collected? I know there are dependency-mapping utilities out there for debugging, but I'm looking for something that can be called dynamically from an object or its parent to find references to the given object and is suitable for regular runtime implementation.
I've got a 15x3 grid of dynamic text fields in an object called "textbox" that I want to reference through a for loop, so I don't have to have 45 lines of code for assigning stuff to those fields.I have each dynamic field named by their placement in the grid, so, c0a, c0b, c0c, c1a, c1b, c1c, etc.I can also name them c00, c01, c02, if necessary.
I tried:
for (i=0; i<15; i++) { textbox.c[i]a.text = "Cell " + i + " A"; textbox.c[i]b.text = "Cell " + i + " B"; textbox.c[i]c.text = "Cell " + i + " C"; }
but that gives me a syntax error.I also tried naming them c00, c01, c02, c10, c11, c12, etc., so I could do a double nested loop:
for (i=0; i<15; i++) { for (n=0; n<3; n++) { textbox.c[i][n].text = "Cell " + i + n; } }
but that gives me a syntax error too.So, is there a way to access all of these with a for loop, or am I going to have to do it the long way?
I need to create two combo boxes that are populated by an XML file. In the first combo box there are 13 choices and depending on what the user selects I need to populate the second combo box with the correct information. Now I can create the first combo box just fine but when I try to dynamically create the XML file name for the second combo box it doesn�t seem to work. What I am doing so far is taking the data from the first combo box and adding the quotes and .xml with this piece of code:
If you trace that code it creates the file name just fine however the xml file will not load. If I replace that code with the normal xml code like this:
PHP Code:
pModComboXML = new XML(); pModComboXML.ignoreWhite = true; pModComboXML.load("new.xml");
The second xml file seems to load just fine. However, if I create an if statement with all the different xml file names I will have to update the swf every time I add a new choice in the first combo box. So my question is does anyone know how to dynamically create the xml file name?
PHP Code:
pmComboXML = new XML(); pmComboXML.ignoreWhite = true; pmComboXML.load("brands combo.xml");
I was thinking about Flash GC the other day and came up with a question about how reference counting would work in the following 4 class scenario (assume GuiMain is the movie's document class):
I'm trying to load different images from xml to movieclips by detecting the movieclips name dynamically via xml.Pratically i have 2 movieclips named "sera" and "diurno".I take the names and the relative urls via xml then i try to add the images to the moviclip that have the same name as the xml, so i know that the "sera" movieclip have the "sera" image.
Code: var loader:Loader; var nomeMovieClip:String;[code].....
I was wondering if it is possible to capture whenever properties are set/accessed/created on dynamic objects?Basically, among others, I want to create a little quick system which acts as an Array and allows you to set the same value of all items inside of it.For example:
Code: var dynamicObjArray:DynamicObjectArray = new DynamicObjectArray(); dynamicObjArray.push(mc1, mc2, mc3, mc4, mc5, mc6);
I was wondering if it is possible to capture whenever properties are set/accessed/created on dynamic objects?Basically, among others, I want to create a little quick system which acts as an Array and allows you to set the same value of all items inside of it.[code]There are several workarounds, (including checking the current value each frame) but I want to know if there is any way of detecting changed properties at all.
I've built a simple file to demonstrate what I'm trying to do (it's all dynamic, with AS3, no physical assets). Basically I've created 3 groups of objects via AS3: squares, circles, and triangles. I've placed 3 menu buttons on the side of the stage. I added all objects to the stage just so you can see them. Ideally I'd like to have each button call one of the groups to the stage and begin the tween that is assigned to the object. In this case I've made all the tweens 'alpha' for simplicity. So for example if the '1' button is clicked, it will add the group of squares to the stage and initiate their alpha tweens so that they fade in. Then when the '2' button is clicked, the squares will be removed and the circles will be added and their tweens initiated. I've never seen a tutorial on this so I'm not quite sure how to proceed. What I'd imagined is to group the objects into arrays then add the arrays to the stage with addChild?
I'm using this as a simple model to build a website where I'm going to be calling the content of each section of the site dynamically with menu buttons, instead of using the timeline at all. This is the next step in my actionscript evolution.
I have a set of dots I am placing on a map dynamically (using attachMovie) with an XML file giving the coordinates. I also am using the "hover caption" tutorial (great) to assign a tooltip for each dot. When I rollover the dots, the tooltip appears fine, but it is under the dots, not at the highest level. I have the level set to getNextHighestDepth():[code]Any ideas as to how to have the tooltip site on top of everything?
If objects are created dynamically in AS3, using code like this:
for (var num:Number = 0; num<10; num++){ var txtFld:TextField = new TextField(); txtFld.text = 'This is the original text'; this.addChild(txtFld); }
then later, i want to changet the text of one of the TextFields, how can I do that? The only instance listed in the variables is a single instance of "txtFld" and it is the last one that is created. How can I access the others?
I was wondering where did go the for statement with attachMovie from library in AS 3.I mean i was having in AS 2:
for (i=0; i<5; i++) { attachMovie("sim", "sim"+i, i); }
Now in AS 3:
for (var i=0; i<5; i++) { addChild(new sim()); }
I can't figure out how to name every instance of the "sim" object from library that i add to the stage without using string.How do I dinamically name the added instances of the object from the library for future reference and usage throughout the code?
I'd like to be able to dynamically access objects from with in a function. In javascript I might say something like window[objectName] and assign it to a temp var or call a method from it. How can I do this in AS3?
Use case:I have a currentReport var that holds the name of the currently active report. When a new report is called I want to unload the current report then load the new one and finally set the currentReport var to the new value.
I have a combination of movie clips, graphic and button objects that I want to appear in front of a movie clip that's being dynamically spawned through ActionScript.
Despite looking at various codes on how to go about doing this, problem is I'm using code somebody else made, so I don't know where to add the code to set the depth order for the spawned object. I'm not even sure which codes to use to achieve the effect I want.[code]...
I have a scroll pane with textboxes and buttons that are dynamically created in a function. The textboxes are a user list that can get very long.
I am having problems where once I get out of this frame I want everything to be removed. I have tried removing the scroll pane but all the dynamically created objects remain. Is there some command when you enter a new frame to clear all objects or something along that line?
I'm trying to create 49 total objects, each 50x50 px. And position them in 7 rows and 7 columns. I think I must use nested for loops but this is all Ive come up with.
Just have a Flash MX question. Is it possible to pipe in XML and dynamically create objects using actionscript? In the instance sense. Can I have a library object and create many instances of it dynamically using actionscript that reads incoming XML?Also, I know it is possible to drive animation with actionscript. Once the object is created, can I give it complex behavior? Does actionscript have classes or is it much simpler than that?
How do I snap/align objects dynamically? For instance, if I have an image loading dynamically and a text box directly below, I want the text box to always touch the edges of the image loaded (regardless of the image's size).
Below is sample code from a Module I have in my Flex app. I want to dynamically create mx.controls.Image objects and add them to the display. I want the user to be able to move them (this works as below) and be able to change their z-index as well as record new X and Y coords after moving back to the database. How do I determine which object in this.getChildren() is the 'selected' item the user is working with? When I add a MOUSE_OVER event, for example, it does not work.[code]
I want to create object instances based on user input but I can't figure out how to get a unique variable name for each instance (I want to be able to get at and manipulate them later). In other languages I would usually just use an eval() function to pull this off.
[Code]....
Code: 1119: Access of possibly undefined property charlie through a reference with static type poundConuter. poundConuter.mxml
I have is as I add objects from other classes to the stage, is there a way to automatically add them to the resize event I have on the main stage to keep them in position in my fluid flash layout? Currently I am declaring all the variables in the project at the top of my primary class, adding them to the stage in the opening function, and then finally adding them to the resize event.
iam in a situation to convert the dynamically created objects( just movieclips which contains boxes,texts etc) in flash using AS3 to .DWG format. i tried converting the flash objects in to SVG format , then tried to open it in Auto Cad , but the texts are not editable in auto Cad;
I want to be able to create and place objects on the stage dynamically and remember their location. I'm guessing the best way would be saving the object type and location in an array? Just wondering if there is a better way before I start coding.