1
对于我的Flash应用程序,我需要计算过程中的所有对象,无论是计时器,墙壁,坦克还是导弹!我在寻找,但我发现了一些函数来计算相同类型的对象的数量。有没有一个功能,类或任何能够做我需要的东西?计算as3中的所有对象
对于我的Flash应用程序,我需要计算过程中的所有对象,无论是计时器,墙壁,坦克还是导弹!我在寻找,但我发现了一些函数来计算相同类型的对象的数量。有没有一个功能,类或任何能够做我需要的东西?计算as3中的所有对象
我也许有一个解决方案给你,但它不是很美丽:p 你可以使用一个为你实例化一切的类,并保持实例的数量。
看看这个类为例:
package
{
import flash.utils.Dictionary;
import flash.utils.getQualifiedClassName;
public class ClassInstaciator
{
/** keep the count of the instance by class names **/
private static var _counts:Dictionary;
public function ClassInstaciator()
{
}
/** instanciate a class **/
public static function instanciate(classe:Class, ...arg):*
{
// create dictionary if not exists
if(!_counts) _counts = new Dictionary();
// get class name
var className:String = getQualifiedClassName(classe);
// if the class isn't int he dictionaray then add it, else increment count
if(!_counts[className]) _counts[className] = 1;
else _counts[className] += 1;
// return the instance depending on args length
switch (arg.length) {
case 0: return new classe();
case 1: return new classe(arg[0]);
case 2: return new classe(arg[0], arg[1]);
case 3: return new classe(arg[0], arg[1], arg[2]);
case 4: return new classe(arg[0], arg[1], arg[2], arg[3]);
case 5: return new classe(arg[0], arg[1], arg[2], arg[3], arg[4]);
case 6: return new classe(arg[0], arg[1], arg[2], arg[3], arg[4], arg[5]);
case 7: return new classe(arg[0], arg[1], arg[2], arg[3], arg[4], arg[5], arg[6]);
case 8: return new classe(arg[0], arg[1], arg[2], arg[3], arg[4], arg[5], arg[6], arg[7]);
case 9: return new classe(arg[0], arg[1], arg[2], arg[3], arg[4], arg[5], arg[6], arg[7], arg[8]);
case 10: return new classe(arg[0], arg[1], arg[2], arg[3], arg[4], arg[5], arg[6], arg[7], arg[8], arg[9]);
}
// return null mean you have more than 10 args ... add cases to the switch ...
return null;
}
/** return the number of instance created for a Class **/
public static function countFor(classe:Class):int
{
// get class name
var className:String = getQualifiedClassName(classe);
// no instances for this class
if(!_counts || !_counts[className]) return 0;
// return the instance count
return _counts[className];
}
/** return a string representing the count of the classes instance by name **/
public static function toString():String
{
var s:String = '';
for(var name:String in _counts)
{
s += name+'::'+_counts[name]+'\r';
}
return s;
}
}
}
,看看如何使用它:
var mc :MovieClip = ClassInstaciator.instanciate(MovieClip) as MovieClip;
var time :Timer = ClassInstaciator.instanciate(Timer, 200, 2) as Timer;
var time2 :Timer = ClassInstaciator.instanciate(Timer, 200, 2) as Timer;
var bd :BitmapData = ClassInstaciator.instanciate(BitmapData, 200, 200) as BitmapData;
trace(ClassInstaciator.countFor(Timer));
//result -> 2
trace(ClassInstaciator.toString());
// result ->
//flash.utils::Timer::2
//flash.display::MovieClip::1
//flash.display::BitmapData::1
正如我说这之前不是很美丽,但它的工作原理;)
也许它可以帮助你。
如果要对实例进行计数的所有类都是您的,则可以为每个类添加一个静态var计数并在每个构造函数上增加它。这更好,更简单。如果它们不是你的,你可以扩展它们来添加count属性。 –
如果它们是DisplayObject实例(Sprite/MovieClip等),则可以使用容器的numChildren,然后根据需要迭代/过滤 –