-
Instantiate a Class picked from a Class Array
I would like to change this:
Code:
obj = new _objectClass();
into something like this:
Code:
var objClass:Class = _objectClassArray[range(0, _objectClassArray.length)] as Class;
obj = new objClass();
trace (_objectClassArray[range(0, _objectClassArray.length)]) // returns [class MyClip] or [class MyClip2] and so on..
Actually this last piece of code throws the following error:
TypeError: Error #1007: Instantiation attempted on a non-constructor.
Full explanation:
This code goes inside an ObjectPool from HYPE Framework of Joshua Davis.
I´ve created a "MultipleObjectPool" and changed some little details , that is: the constructor, instead of receiving a Class as a parameter, receives then a Class Array, so each time it should create an object (via the request() function) of a Class that is picked randomically from the Class Array.
Is that possible ?
Thanks in advance!
Last edited by ziriguidum; 03-05-2010 at 06:11 PM.
Reason: add stuff, clarify
-
Are you sure that the objects in your class array are Classes? Does range return a single random integer in the specified range?
If both of those are true, it should work.
I suspect you have something other than classes in your array (such as String), causing objClass to be null.
-
Senior Member
This example will give you the error you got, because Green is a string:
var myArray:Array = new Array("Green");
var objClass:Class = myArray[0] as Class;
var objisplayObjectContainer = new objClass() as DisplayObjectContainer;
addChild(obj);
Changing the first line will correct the mistake:
var myArray:Array = new Array(Green);
Probably the array members are all strings.
- The right of the People to create Flash movies shall not be infringed. -
-
solved! now, how to decently extend a class?
Hi, I solved it this way:
obj = new _objectClassArray[range(0, _objectClassArray.length - 1)];
simple
I wonder now how could I extend the class ObjectPool
Cause I've just copied the whole code into a new .as file I called "MultipleObjectPool" and changed very little stuff on it.
But I know that's definitely not good practice.
So, these are the changes I've made in the "MultipleObjectPool" class:
1st - I added the "_objectClassArray" instance variable (not sure if it's called this way) , and removed the "_objectClass" instance variable since I didn't need it anymore.
2nd - The constructor changed:
Code:
public function ObjectPool(objectClass:Class, max:uint) {
_objectClass = objectClass;
becomes
Code:
public function ObjectPool(objectClassArray:Array, max:uint) {
_objectClassArray = objectClassArray;
3rd - in function request():
Code:
obj = new _objectClass();
becomes
Code:
obj = new _objectClassArray[range(0, _objectClassArray.length - 1)];
I'm not good enough in OOP to know how to do this... so please help! Then I can share it with you!
Thanks!
-
hey, thanks for answering,
The objects in the array ware actually Classes.
i 'm still don't know why this didn't work:
Code:
var objClass:Class = _objectClassArray[range(0, _objectClassArray.length)] as Class;
obj = new objClass();
but the important thing is that this works:
Code:
obj = new _objectClassArray[range(0, _objectClassArray.length - 1)];
please read my previous post!
thanks!
Tags for this Thread
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|