|
|
|
#1 |
|
Member
Join Date: Jul 2009
Location: Florianópolis
Posts: 79
|
Instantiate a Class picked from a Class Array
I would like to change this:
Code:
obj = new _objectClass(); 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.. 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 05:11 PM. Reason: add stuff, clarify |
|
|
|
|
|
#2 |
|
Will moderate for beer
Join Date: Apr 2007
Location: Austin, TX
Posts: 5,399
|
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. |
|
|
|
|
|
#3 |
|
Mod
Join Date: Mar 2002
Location: press the picture...
Posts: 12,744
|
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 obj isplayObjectContainer = 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. - | www.Flashscript.biz | Help a little girl, Ana, who has cancer. | Flashscript Biz Classes/Components | The new Event design pattern | Clothing for Haiti | |
|
|
|
|
|
#4 |
|
Member
Join Date: Jul 2009
Location: Florianópolis
Posts: 79
|
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;
Code:
public function ObjectPool(objectClassArray:Array, max:uint) {
_objectClassArray = objectClassArray;
Code:
obj = new _objectClass(); Code:
obj = new _objectClassArray[range(0, _objectClassArray.length - 1)]; ![]() Thanks! |
|
|
|
|
|
#5 |
|
Member
Join Date: Jul 2009
Location: Florianópolis
Posts: 79
|
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(); Code:
obj = new _objectClassArray[range(0, _objectClassArray.length - 1)]; thanks! |
|
|
|
![]() |
| Tags |
| array, class, hype, object, pool |
|
||||||
| Thread Tools | |
| Display Modes | Rate This Thread |
|
|