-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSpritePool.as
46 lines (39 loc) · 1.11 KB
/
SpritePool.as
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package classes{
import starling.display.DisplayObject;
import classes.FFParticleSystem.SystemOptions;
import flash.utils.*;
public class SpritePool
{
private var pool:Array;
private var counter:int;
private var Function
public function SpritePool(type:Class, len:int, args:Array = null)
{
pool = new Array();
counter = len;
if(!args) args = new Array();
var i:int = len;
while(--i > -1){
switch (args.length) {
case 0:pool[i] = new type(); break;
case 1:pool[i] = new type(args[0]); break;
case 2:pool[i] = new type(args[0], args[1]); break;
case 3:pool[i] = new type(args[0], args[1], args[2]); break;
case 4:pool[i] = new type(args[0], args[1], args[2], args[3]); break;
default: throw new Error('too many arguments in SpritePool');
}
}
}
public function getSprite():DisplayObject
{
if(counter > 0)
return pool[--counter];
else
throw new Error('You exhausted the pool! Class: ' + getQualifiedClassName(pool[0]));
}
public function returnSprite(s:DisplayObject):void
{
pool[counter++] = s;
}
}
}