RE: [Flashcoders] Create an object by name
> >> Might be interesting to know why you need to do this at all. > >> > > > > I'm using an XML document to create a file. Without going into > > details, each node of the XML is to be turned into an > object, based on the kind of node. > > So for example: > > > > > > > > This would become two objects, one an instance of > MyBigClass, one an > > instance of MySmallClass. In an old version of this, each one was a > > MovieClip with the appropriate linkage name. Now I'm trying > to do it > > more flexibly with objects (so that in particular, each object type > > can inherit a standard class, and so that I don't have to have a > > separate movieClip for each object type). > > > > Danny > > > > > Why would you not have 1 class with 2 properties "type" and "size"? > What is different between the 2 items that requires different > classes? > The properties are the same. What does Big do that Small does not do? Loads of things (remember, 'big' and 'small' are just examples here). They're completely different objects. For example, one might refer to a bit of text, another to a picture, etc. If I put it all into one class, I'd have to fill it with Ifs and Switchs, which is what I'm trying to avoid. (Btw, I was out of communication yesterday due to a break-in at our office, so apologies to those people who sent replies that I didn't respond to) Best Danny ___ Flashcoders@chattyfig.figleaf.com To change your subscription options or search the archive: http://chattyfig.figleaf.com/mailman/listinfo/flashcoders Brought to you by Fig Leaf Software Premier Authorized Adobe Consulting and Training http://www.figleaf.com http://training.figleaf.com
Re: [Flashcoders] Create an object by name
Might be interesting to know why you need to do this at all. I'm using an XML document to create a file. Without going into details, each node of the XML is to be turned into an object, based on the kind of node. So for example: This would become two objects, one an instance of MyBigClass, one an instance of MySmallClass. In an old version of this, each one was a MovieClip with the appropriate linkage name. Now I'm trying to do it more flexibly with objects (so that in particular, each object type can inherit a standard class, and so that I don't have to have a separate movieClip for each object type). Danny Why would you not have 1 class with 2 properties "type" and "size"? What is different between the 2 items that requires different classes? The properties are the same. What does Big do that Small does not do? Ron ___ Flashcoders@chattyfig.figleaf.com To change your subscription options or search the archive: http://chattyfig.figleaf.com/mailman/listinfo/flashcoders Brought to you by Fig Leaf Software Premier Authorized Adobe Consulting and Training http://www.figleaf.com http://training.figleaf.com
RE: [Flashcoders] Create an object by name
Most of the time, what I've seen is setting a temporary var to either an instance of the class, or in the case of a static class, setting it to a reference to the class. var myClass:MyClass = new com.client.project.package.MyClass(); or var myClass:MyClass = com.client.project.package.MyClass; I have to wonder, though, if there's not a better way to accomplish what you're trying to achieve. ___ Flashcoders@chattyfig.figleaf.com To change your subscription options or search the archive: http://chattyfig.figleaf.com/mailman/listinfo/flashcoders Brought to you by Fig Leaf Software Premier Authorized Adobe Consulting and Training http://www.figleaf.com http://training.figleaf.com
Re: [Flashcoders] Create an object by name
- Original Message - From: "Danny Kodicek" <[EMAIL PROTECTED]> To: Sent: Monday, March 19, 2007 2:36 PM Subject: RE: [Flashcoders] Create an object by name > > > > I'm still not entirely sure what import actually > > > *does* :) > > > > It tells flash where the class definitions can be found and > > distinguishes between classes of the same name, but different > > packages. > > You know, it occurs to me that import is an astonishingly bad name for this > statement. Poorly named methods and properties can really screw up > understanding, and not just in third party code. Sometimes I think properly > named variables or methods can do half your coding for you. Why is it not > called something else? I can think of three better names immediately: > pointTo, locate or classAt Sounds like three worse names, I'm afraid. Import is really the industry standard here (in other languages besides Actionscript) and it would be bad to move from it. IMHO it's pretty descriptive - you import these classes into your project. On reflection, my description is a bit superficial. Import is dealing with class namespaces and packages (collections of classes). I'd better stop now. Paul > > Danny > > ___ > Flashcoders@chattyfig.figleaf.com > To change your subscription options or search the archive: > http://chattyfig.figleaf.com/mailman/listinfo/flashcoders > > Brought to you by Fig Leaf Software > Premier Authorized Adobe Consulting and Training > http://www.figleaf.com > http://training.figleaf.com > ___ Flashcoders@chattyfig.figleaf.com To change your subscription options or search the archive: http://chattyfig.figleaf.com/mailman/listinfo/flashcoders Brought to you by Fig Leaf Software Premier Authorized Adobe Consulting and Training http://www.figleaf.com http://training.figleaf.com
RE: [Flashcoders] Create an object by name
> > I'm still not entirely sure what import actually > > *does* :) > > It tells flash where the class definitions can be found and > distinguishes between classes of the same name, but different > packages. You know, it occurs to me that import is an astonishingly bad name for this statement. Poorly named methods and properties can really screw up understanding, and not just in third party code. Sometimes I think properly named variables or methods can do half your coding for you. Why is it not called something else? I can think of three better names immediately: pointTo, locate or classAt Danny ___ Flashcoders@chattyfig.figleaf.com To change your subscription options or search the archive: http://chattyfig.figleaf.com/mailman/listinfo/flashcoders Brought to you by Fig Leaf Software Premier Authorized Adobe Consulting and Training http://www.figleaf.com http://training.figleaf.com
RE: [Flashcoders] Create an object by name
> > I'm still not entirely sure what import actually > > *does* :) > > It tells flash where the class definitions can be found and > distinguishes between classes of the same name, but different > packages. > > You seem to be in a mega hurry Danny! I've been working on my current task for about nine months and I'm approaching the home stretch. I want the damn thing finished. (I was also hoping to have this bit done before I go on holiday next week!) Plus I never get any work done unless I'm in a hurry... Danny ___ Flashcoders@chattyfig.figleaf.com To change your subscription options or search the archive: http://chattyfig.figleaf.com/mailman/listinfo/flashcoders Brought to you by Fig Leaf Software Premier Authorized Adobe Consulting and Training http://www.figleaf.com http://training.figleaf.com
RE: [Flashcoders] Create an object by name
> Hi Danny, > An import statement is just a compiler-friendly shortcut. > It has no effect whatsoever on the final code. > > Saying: > > import com.pkg.fred.Bucket; > > // later > var bucket:Bucket=new Bucket(); > > is identical to saying just: > var bucket:com.pkg.fred.Bucket=new com.pkg.fred.Bucket(); > > That's all it is. A convent bit of syntactic sugar. It's > exactly the same in Java. You know something? I actually knew that somewhere in my head, but it had been temporarily squished. Thanks. > As soon as you refer to the class in some way that ensures it > is compiled in (i.e. an import will not do, but any concrete > reference such as the line above will do) then that class is > available to any other piece of code within that same Flash > VM, with the following > exception: IIRC SWFs compiled for Flash 6 and Flash 7 don't > share thair global namespace (so I'd imagine that you'd have > issues there). Brilliant, that makes a *lot* more sense. In particular, it means I don't have to import all my packages into every blimmin' class. > P.S. How're the interactive storytelling things going..? :) Try me again in about a year and a half. We've been head down in a lot of tech-heavy and content-light development recently, but who knows, once this current stuff is done we might go back to something a bit more creative... Danny ___ Flashcoders@chattyfig.figleaf.com To change your subscription options or search the archive: http://chattyfig.figleaf.com/mailman/listinfo/flashcoders Brought to you by Fig Leaf Software Premier Authorized Adobe Consulting and Training http://www.figleaf.com http://training.figleaf.com
Re: [Flashcoders] Create an object by name
On 3/19/07, Ian Thomas <[EMAIL PROTECTED]> wrote: That's all it is. A convent bit of syntactic sugar. It's exactly the same in Java. Um... _convenient_, obviously. Although that does conjure up some wacky images... Ian ___ Flashcoders@chattyfig.figleaf.com To change your subscription options or search the archive: http://chattyfig.figleaf.com/mailman/listinfo/flashcoders Brought to you by Fig Leaf Software Premier Authorized Adobe Consulting and Training http://www.figleaf.com http://training.figleaf.com
Re: [Flashcoders] Create an object by name
Hi, new eval("_global.mypackage.MyClass") does the trick as well I believe. greetz JC On 3/19/07, Danny Kodicek <[EMAIL PROTECTED]> wrote: > > If I have a string, how can I make an object from the class > it represents? > > Eg: > > > > I have class MyBigClass > > the string className contains the text "Big" > > > > I want to do something like > > obj:Object = new("My" + className + "Class")() > Paul: > Might be interesting to know why you need to do this at all. I'm using an XML document to create a file. Without going into details, each node of the XML is to be turned into an object, based on the kind of node. So for example: This would become two objects, one an instance of MyBigClass, one an instance of MySmallClass. In an old version of this, each one was a MovieClip with the appropriate linkage name. Now I'm trying to do it more flexibly with objects (so that in particular, each object type can inherit a standard class, and so that I don't have to have a separate movieClip for each object type). Danny ___ Flashcoders@chattyfig.figleaf.com To change your subscription options or search the archive: http://chattyfig.figleaf.com/mailman/listinfo/flashcoders Brought to you by Fig Leaf Software Premier Authorized Adobe Consulting and Training http://www.figleaf.com http://training.figleaf.com ___ Flashcoders@chattyfig.figleaf.com To change your subscription options or search the archive: http://chattyfig.figleaf.com/mailman/listinfo/flashcoders Brought to you by Fig Leaf Software Premier Authorized Adobe Consulting and Training http://www.figleaf.com http://training.figleaf.com
RE: [Flashcoders] Create an object by name
Hi Danny, The idea of the import statement is to specify which class namespaces you want to use. For example, there could be multiple packages that contain a class named "Danny": com.kodicek.Danny com.day.lewis.Danny If you wanted to use the first class, you'd need to write all of it every time you wanted to instantiate it, like this: myClass = new com.kodicek.Danny () myClone = new com.kodicek.Danny () But to make it easier, you can import it at the top of the containing class: import com.kodicek.Danny; Having imported it, you let the containing class know which Danny you want to be using, so then you can instantiate it without appending the full package name each time: myClass = new Danny() myClone = new Danny() You can also use: import com.kodicek.*; And that would import all the classes in the specified package, saving you the hassle of importing them one by one - but Flash will only compile the class or classes you end up using in the script, keeping the swf size just as small as if you'd used "import com.kodicek.Danny". I hope that wasn't over-explaining: I know you're not exactly a newbie to programming ;) Karina > -Original Message- > From: Danny Kodicek [mailto:[EMAIL PROTECTED] > Sent: 19 March 2007 11:45 > To: flashcoders@chattyfig.figleaf.com > Subject: RE: [Flashcoders] Create an object by name > > > Hello Danny, > > This short snippet should return you the constructor: > > > > /** Returns the class constructor from a dotted path. > > * e.g. [EMAIL PROTECTED] var > > cons:Function=getConstructorFromPath("com.pkg.fred.Bucket"); } > > */ > > public static function > > getConstructorFromPath(classPath:String):Function > > { > > var arr:Array=classPath.split("."); > > var obj:Object=_global; > > for(var i:Number=0;i > { > > obj=obj[arr[i]]; > > } > > return Function(obj); > > } > > > > Then just do var obj:Object=new cons(); > > Thanks, Ian. So constructor functions are actually located in > _global space? > That makes sense - is it always true, or do I need to ensure > it in some way? > After all, if I do an import somewhere, that class is only > available in the scope of the import statement, not > everywhere in the movie (I think?). > > Again, sorry to be pushing these questions so much - I just > find that once I understand what's going on 'behind the > scenes', I get much clearer about what my side of things is. > I'm still not entirely sure what import actually > *does* :) > > Danny > > ___ > Flashcoders@chattyfig.figleaf.com > To change your subscription options or search the archive: > http://chattyfig.figleaf.com/mailman/listinfo/flashcoders > > Brought to you by Fig Leaf Software > Premier Authorized Adobe Consulting and Training > http://www.figleaf.com http://training.figleaf.com > ___ Flashcoders@chattyfig.figleaf.com To change your subscription options or search the archive: http://chattyfig.figleaf.com/mailman/listinfo/flashcoders Brought to you by Fig Leaf Software Premier Authorized Adobe Consulting and Training http://www.figleaf.com http://training.figleaf.com
Re: [Flashcoders] Create an object by name
- Original Message - From: "Danny Kodicek" <[EMAIL PROTECTED]> To: I'm still not entirely sure what import actually *does* :) It tells flash where the class definitions can be found and distinguishes between classes of the same name, but different packages. You seem to be in a mega hurry Danny! Paul Danny ___ Flashcoders@chattyfig.figleaf.com To change your subscription options or search the archive: http://chattyfig.figleaf.com/mailman/listinfo/flashcoders Brought to you by Fig Leaf Software Premier Authorized Adobe Consulting and Training http://www.figleaf.com http://training.figleaf.com ___ Flashcoders@chattyfig.figleaf.com To change your subscription options or search the archive: http://chattyfig.figleaf.com/mailman/listinfo/flashcoders Brought to you by Fig Leaf Software Premier Authorized Adobe Consulting and Training http://www.figleaf.com http://training.figleaf.com
Re: [Flashcoders] Create an object by name
Hi Danny, An import statement is just a compiler-friendly shortcut. It has no effect whatsoever on the final code. Saying: import com.pkg.fred.Bucket; // later var bucket:Bucket=new Bucket(); is identical to saying just: var bucket:com.pkg.fred.Bucket=new com.pkg.fred.Bucket(); That's all it is. A convent bit of syntactic sugar. It's exactly the same in Java. Simply using the import line by itself will have no effect on the compilation (try importing 300 classes and compiling your app - the filesize will not increase. :-) ) As soon as you refer to the class in some way that ensures it is compiled in (i.e. an import will not do, but any concrete reference such as the line above will do) then that class is available to any other piece of code within that same Flash VM, with the following exception: IIRC SWFs compiled for Flash 6 and Flash 7 don't share thair global namespace (so I'd imagine that you'd have issues there). Obviously the globals/classes won't be shared between AVM1 and AVM2 (but then, AS3 has a totally different class locating/loading mechanism anyway). For AS2, yes, class constructors are always located in the _global space as soon as that class is loaded. (In fact, you can load a _different version_ of a class at runtime if you delete the existing class from the global space). I hope that clears it up. Of course, I could just be babbling. :-) Cheers, Ian P.S. How're the interactive storytelling things going..? On 3/19/07, Danny Kodicek <[EMAIL PROTECTED]> wrote: > Hello Danny, Thanks, Ian. So constructor functions are actually located in _global space? That makes sense - is it always true, or do I need to ensure it in some way? After all, if I do an import somewhere, that class is only available in the scope of the import statement, not everywhere in the movie (I think?). Again, sorry to be pushing these questions so much - I just find that once I understand what's going on 'behind the scenes', I get much clearer about what my side of things is. I'm still not entirely sure what import actually *does* :) Danny ___ Flashcoders@chattyfig.figleaf.com To change your subscription options or search the archive: http://chattyfig.figleaf.com/mailman/listinfo/flashcoders Brought to you by Fig Leaf Software Premier Authorized Adobe Consulting and Training http://www.figleaf.com http://training.figleaf.com
RE: [Flashcoders] Create an object by name
> > If I have a string, how can I make an object from the class > it represents? > > Eg: > > > > I have class MyBigClass > > the string className contains the text "Big" > > > > I want to do something like > > obj:Object = new("My" + className + "Class")() > Paul: > Might be interesting to know why you need to do this at all. I'm using an XML document to create a file. Without going into details, each node of the XML is to be turned into an object, based on the kind of node. So for example: This would become two objects, one an instance of MyBigClass, one an instance of MySmallClass. In an old version of this, each one was a MovieClip with the appropriate linkage name. Now I'm trying to do it more flexibly with objects (so that in particular, each object type can inherit a standard class, and so that I don't have to have a separate movieClip for each object type). Danny ___ Flashcoders@chattyfig.figleaf.com To change your subscription options or search the archive: http://chattyfig.figleaf.com/mailman/listinfo/flashcoders Brought to you by Fig Leaf Software Premier Authorized Adobe Consulting and Training http://www.figleaf.com http://training.figleaf.com
RE: [Flashcoders] Create an object by name
> Hello Danny, > This short snippet should return you the constructor: > > /** Returns the class constructor from a dotted path. > * e.g. [EMAIL PROTECTED] var > cons:Function=getConstructorFromPath("com.pkg.fred.Bucket"); } > */ > public static function > getConstructorFromPath(classPath:String):Function > { > var arr:Array=classPath.split("."); > var obj:Object=_global; > for(var i:Number=0;i { > obj=obj[arr[i]]; > } > return Function(obj); > } > > Then just do var obj:Object=new cons(); Thanks, Ian. So constructor functions are actually located in _global space? That makes sense - is it always true, or do I need to ensure it in some way? After all, if I do an import somewhere, that class is only available in the scope of the import statement, not everywhere in the movie (I think?). Again, sorry to be pushing these questions so much - I just find that once I understand what's going on 'behind the scenes', I get much clearer about what my side of things is. I'm still not entirely sure what import actually *does* :) Danny ___ Flashcoders@chattyfig.figleaf.com To change your subscription options or search the archive: http://chattyfig.figleaf.com/mailman/listinfo/flashcoders Brought to you by Fig Leaf Software Premier Authorized Adobe Consulting and Training http://www.figleaf.com http://training.figleaf.com
Re: [Flashcoders] Create an object by name
Hello Danny, This short snippet should return you the constructor: /** Returns the class constructor from a dotted path. * e.g. [EMAIL PROTECTED] var cons:Function=getConstructorFromPath("com.pkg.fred.Bucket"); } */ public static function getConstructorFromPath(classPath:String):Function { var arr:Array=classPath.split("."); var obj:Object=_global; for(var i:Number=0;i wrote: If I have a string, how can I make an object from the class it represents? Eg: I have class MyBigClass the string className contains the text "Big" I want to do something like obj:Object = new("My" + className + "Class")() And on the subject: The docs say that when importing a package, only those classes that are actually used are included with the swf, but in my case the classes that are used are going to be dynamic and dependent on the data read by the movie at runtime. Do I need to instantiate a dummy version of each class to ensure it is included? ___ Flashcoders@chattyfig.figleaf.com To change your subscription options or search the archive: http://chattyfig.figleaf.com/mailman/listinfo/flashcoders Brought to you by Fig Leaf Software Premier Authorized Adobe Consulting and Training http://www.figleaf.com http://training.figleaf.com
Re: [Flashcoders] Create an object by name
- Original Message - From: "Danny Kodicek" <[EMAIL PROTECTED]> To: Sent: Monday, March 19, 2007 10:08 AM Subject: [Flashcoders] Create an object by name If I have a string, how can I make an object from the class it represents? Eg: I have class MyBigClass the string className contains the text "Big" I want to do something like obj:Object = new("My" + className + "Class")() Might be interesting to know why you need to do this at all. Paul snip Danny ___ Flashcoders@chattyfig.figleaf.com To change your subscription options or search the archive: http://chattyfig.figleaf.com/mailman/listinfo/flashcoders Brought to you by Fig Leaf Software Premier Authorized Adobe Consulting and Training http://www.figleaf.com http://training.figleaf.com ___ Flashcoders@chattyfig.figleaf.com To change your subscription options or search the archive: http://chattyfig.figleaf.com/mailman/listinfo/flashcoders Brought to you by Fig Leaf Software Premier Authorized Adobe Consulting and Training http://www.figleaf.com http://training.figleaf.com