Actionscript :: Flex - Creating A Class Dynamically?
Jul 17, 2009
I need to load all images that I have used in my project externally without embedding. The images are present either in skins or as icons for items in trees. I came across the IconUtility class here I was able to modify it and use it for trees but the problem is we cannot use iconutility for the same component to set 2 different skins (like for a button - upskin downskin). I was not able to think of a workaround with iconutility. Is it possible to simulate embed and create a class dynamically and return the class at runtime?
Version: Flash CS4, AS3 is it possible to turn a given sprite into a Class with a given string as its name? The resulting class should then be available under that name in the current domain's definitions.ie.
createClass(someSprite, "someName"); .... var someClass:Class = getDefinitionByName("someName") as Class;
I'm having one of those moments where I can't figuring out the simplest of tasks. And I'm presuming it's just a silly syntax error on my part. I'm calling a class that handles a nice lightning effect. And this is how I would initially set that up:
I've come across a couple threads that pertain t my question but after reading them, trying different approaches, and searching the internet I am still confused. How do I create visual elements, such as a text field, dynamically from Actionscript in a class file?
Basically I created a class file that loads an external XML file and now I want to create dynamic text fields for the elements in the XML file. I did some debugging and I know the XML is loaded correctly. I can also get it to create dynamic text fields when I place the code inside of the fla. The problem is when the code is in the class file. I've read that you need to pass the display object to the class but I am still unclear on how to do it.
My fla has the following code on the first frame:
import classes.estimatesheet; var sheet1:estimatesheet = new estimatesheet("xml/estimationSheetFields.xml");
I am making a Thumbnail class which is part of my Photo Gallery Package that I am building with the intent of automatically generating my thumbnails. I do not want to limit myself to just AS3 animations, I would also like the ability to use timeline animations. I have a system using "in" and "out" for frame labels which I find very efficient and I get stuff done quickly. So I created the thumbnails holder MovieClip with the animations and have it linked in my Library, however, when I try to pass it to my Thumbnail Class, I only get one instance and I need to create several instances.
Document Class ActionScript Code: var thumbCont:mcThumb = new mcThumb(); thumbNails = new Thumbnails(thumbCont);
Thumbnails Class ActionScript Code: var thumbContainer:MovieClip; public function Thumbnails(thumbCont:MovieClip,) { thumbContainer = thumbCont; }private function createThumbs():void { for (var i:int = 0; i < aThumbs.length; i++) { [Code] .....
I eliminated most of the additional stuff. What this does is that it doesn't create several thumbContainers, rather it just uses the one. So how would I be able to generate several of them? I can obviously create an Array with them and create them in my document class, but if I can avoid that and have my thumbnail class do it by itself, that would be perfect.
I have recently started out with flash oop concepts and was wondering how to do create an instance of an extended movie class without dragging and dropping the clip from the library ....I have figured out this method..
I have a XML and it has an attribute option or combo box, parsing that i need to create components in my flex dynamically. Viatropos has given a wonderful code, but i am not able to execute it... can anyone produce it.
i'm loading several sound files, and want to error check each load. however, instead programming each one with their own complete/error functions, i would like them to all use the same complete/error handler functions.
a successfully loaded sound should create a new sound channel variable, while an unsuccessfully loaded sound will produce a simple trace with the name of the sound that failed to load. however, in order to do this, i need to dynamically create variables, which i haven't yet figured out how to do.
here's my code for my complete and error functions:
function soundLoadedOK(e:Event):void { //EX: Sound named "explosion" will create Sound Channel named "explosionChannel" var String(e.currentTarget.name + "Channel"):SoundChannel = new SoundChannel();
Isn't there some way to re-write the following code, such that I don't need a gigantic switch statement with every conceivable type? Also, if I can replace the switch statement with some way to dynamically create new controls, then I can make the code smaller, more direct, and don't have to anticipate the possibility of custom control types.Before:
1) Using datefield as item renderer in flex.I am dynamically creating datagrid and its columns. like
dataGridColumn=new DataGridColumn(); dataGridColumn.dataField="invoiceDTO.invoiceDate";// I read this value from XML dataGridColumn.editorDataField="selectedDate"; dataGridColumn.itemRenderer=new ClassFactory(DateFieldRenderer); dataGridColumn.rendererIsEditor=true;
But when UI is generated i get the error invoiceDTO.invoiceDate not found on the TestDTO
//Test DTO
public class TestDTO { public var invoiceDTO:InvoiceDTO; }
My objective is my dataField should be binded with datafield inside the datagrid.How can i do it in actionscript
2) I need to present combobox as item renderer. (same like case 1). But how can i assign dataprovider in the combobox which is present inside the datagrid.
I need a List that resizes to exactly fit its content, unless that height exceeds its (dynamically sized) parent container. My requirements are as follows:
The component extends List, or at least acts similarly. variableRowHeight and wordWrap both equal to true. The height of the list cannot be less than minHeight (roughly 32px for scrollbar arrows). The height of the list cannot be greater than the height of the parent container .
Note that the parent container can be resized dynamically.
The height of the list should be updated as the size of both the contents and parent container changes.
Live updating would be preferable but not necessary.
There should be no scrollbars if the content height is less than the parent container height (sounds obvious, but I've had trouble with this too).
The trouble is that with variableRowHeight and wordWrap, it's very hard to know the size of the content at any given time. If the parent container's width is reduced, a line wrap may occur in the list which will change the height of the content. I know I can measure the height of the list content using measureHeightOfItems() + viewMetrics.top + viewMetrics.bottom, but when should I calculate that? What events should I listen for? And the thing I've had the most trouble with - when should I calculate it to set the size initially (i.e. just as the content has finished populating)?
///Get BitmapData from library in SWC var ClassReference:Class = getDefinitionByName(products[i].producticon+"Data") as Class; // Create new BitmapData Instance From it
[Code]....
I get null in the trace. How do I make a dynamic class that I can refer to for this bitmap similar to how your reference a class from and embedded media?
Using org.as3commons.reflect I can look-up the class name, and instantiate a class at runtime.I also have (non-working) code which invokes a method. However, I really want to set a property value. I'm not sure if properties are realized as methods internally in Flex.I have a Metadata class which stores 3 pieces of information: name, value, and type (all are strings).I want to be able to loop through an Array of Metadata objects and set the corresponding properties on the instantiated class.[code]I realize that I have to declare a dummy variable of the type I was to instantiate, or use the -inculde compiler directive. An unfortunate drawback of Flex.Also, right now there's code to account for typecasting the value to it's specified type.
Is there a way to generate an instance of a class that implements an interface based on the name of the class?
I am trying:
var ClassReference:Object = getDefinitionByName("movement.OuterSpaceMovement") as IMovement; var m:IMovement = new ClassReference as IMovement; trace("startup..." + m);
-But I am getting an error message ReferenceError: Error #1065 (OuterSpaceMovement) not defined.
I have several classes that implement the same interface (IMovement) but I need to be able to generate new instances of these classes and then pass these instances as a datatype (IMovement datatype) to other classes...
So then I tried:
var ClassReference:Class = getDefinitionByName("OuterSpaceMovement") as Class; var m:IMovement = new ClassReference() as IMovement; and this doesn't seem to work...but the following var m:IMovement = new OuterSpaceMovement();
I'm trying to create a new instance of a MovieClip when the original one has been used. Would sound easy enough. Just use: var
instanceName:ClassName = new ClassName();
the class name/mc in the library im trying to duplicate is MCg1 so
var instanceName:MCg1 = new MCg1(); right?
However, the particular object in the library i'm trying to duplicate has a base class that is an external class file (just to control it's drag drop functionality)... i.e baseclass is not set to the standard flash.display.MovieClip, or whatever the case maybe. So i end out with a: TypeError: Error #1009: Cannot access a property or method of a null object reference.
I'm creating a slideshow where each slide can have:- a video or a still- 1 audio track or many (up to 3)- 1 button or many (up to 3)I was thinking that each slide can be it's own object, and then I would pass the video, audio, buttons, etc., into it as parameters:
I have a class that represents a turret in the center of my screen.When I hold down SPACE, I want it to create a "bullet"-object that moves in the direction of the turrets cannon, every frame the SPACE key is held down. I am having problems with this cause I am getting this error when I am trying to create the object:
Error #1009: Cannot access a property or method of a null object reference.
This is where the error occurs:
ActionScript Code: public function chaingun(x_:int, y_:int, rot:int, cd:Number, spd:Number, sprd:Number, life:Number) { this.Cooldown = cd; this.Speed = spd;
[code]....
PS: What happens is that when I press the SPACE key, the "turret" class event handler runs the function "Shoot_Chaingun" and that function creates a new Chaingun-object (which actually is a bullet), that inherits the x, y, and rotation of the turret, along with some additional varaibles, including lifetime. Then upon creation, I use "addChild(this)" to add it to the main stage, and "removeChild(this)" once it's lifetime is up.
EDIT: And also, I just realized I don't have a MovieClip linked to this chaingun class. How do I make sure that every time a chaingun object is made, the MovieClip is also loaded?
I have 1 class that extends movieclip, let's call it Class0. I have 1 class that extends movieclip, let's call it Class1.
I create an instance of Class0 on stage like : var myClip0:Class0 = new Class0(this, "Class1");
The class Class0 when initializing, will create a new movieclip (myClip1) and add it as child, as an instance of Class1, like myClip0.myClip1. But it's when i create that clip, i want to tell it, it's an instance of Class1, like :
private var myClip1:Class1 = new Class1(this);
Where Class1 could be any class.
How do i pass Class1 to Class0 so it can create it dynamically?? Do i have to use the apply function??
how would I make Flash create a jpg or png file of what was currently on screen dynamically? I would like to know how to go about doing this and I'm sure it probably involves some other scripting language (PHP?) also.
My game is initialized by calling the newBall function below. Every 10 seconds a new ball is created to increase the difficulty by calling the same function. The function works and creates the new ball movie clip, however the previous ball object gets destroyed for some reason. I have an array called ballArr that is supposed to keep track of all of the ball movie clips. I thought that by concatenating the name of the instance with an incrementing number that it wouldn't overwrite the existing object... what am I doing wrong?
Code: function newBall() { var ballNum = ballArr.length + 1; var ball = this.attachMovie("ball_mc", "i" + string(ballNum), 0, {
I would like to be able to create and call an Array dynamically. So to pass a name through a function and create an array based on that name.Then to store values into sections in the array. I got the creating the array dynamically working, but I can't seem to store into it.
Code: Sort = function (numOfVars,Name,toSort){ This works _global[Name] = New Array(New Array (),New Array()); This does not work _global[Name][i][c]= 3 This does not work _global[Name + "[i][c]"]= 3 This does not work _global[[Name][i][c]]= 3 }
I have two MCs classesThe first one is put on the stage. Then, from the first MC class (inside the class), i put another MC. So i created a MC inside the first MC.I can see both MC when i test my movie.I put the second MC when the mouse cursor is over the first MC, and i remove it when the mouse cursor is out the first MC.My problem is that when the mouse cursor is over the second MC, the movie behaves like the mouse cursor goes out of the first MC, so the second MC is removed, so i can't click on it.
take an arbitrary variable, and create that number of timers, with a corresponding number of listeners? And then write a function to deal with the listeners?
I want to make a site for my personal gallery and i'm asking you if there is another method to make my gallery, other that the one when the user click Back and Next to navigate through thhe images in the order that i chose. I want to create some buttons dynamically (so i will be able to add images to the gallery without replacing the SWF) and assign each of these buttons an on(release) or on(press) event handler that will show the image for that button
Im creating many textfields dynamically and I dont want to have to repeat the same code over and over for each field. Currently I have something like below which deosnt work.