Ich bin neu bei haxe openfl, ich habe mit flash und staring ein Spiel entwickelt, ich bin verwirrt über die Konvertierung von flash zu openfl haxe.Haxe Starling Object Pooling mit dynamischem Objekttyp
public class StarlingPool
{
public var items:Array;
private var counter:int;
public function StarlingPool(type:Class, len:int)
{
items = new Array();
counter = len;
var i:int = len;
while(--i > -1)
items[i] = new type();
}
public function getSprite():DisplayObject
{
if(counter > 0)
return items[--counter];
else
throw new Error("You exhausted the pool!");
}
public function returnSprite(s:DisplayObject):void
{
items[counter++] = s;
}
public function destroy():void
{
items = null;
}
}
ist hier ein Star Pool Klasse von Lee Brimelow habe ich frage mich, wie kann ich es Haxe konvertieren,
Ich mag versucht -
class StarlingPool
{
public var items:Array<Class>;
private var counter:Int;
public function new(type:Class<Dynamic>, len:Int)
{
items = new Array<Class<Dynamic>>();
counter = len;
var i:Int = len;
while (--i > -1)
items[i] = type;
}
public function getSprite():Class<Dynamic>
{
if (counter > 0)
return items[--counter];
else
throw new Error("You exhausted the pool!");
return null;
}
public function returnSprite(s:Dynamic):Void
{
items[counter++] = s;
}
public function destroy():Void
{
items = null;
}
}
Aber ich Dosis nicht funktioniert, vielleicht ich bin Gießen es nicht richtig, zum Beispiel -
pool = new StarlingPool(Bullet, 100);
var b:Bullet = cast(pool.getSprite()); //or
var b:Bullet = cast(pool.getSprite(),Bullet)
Sie definierten Elemente als 'Array' und definieren es dann als 'Array >'? Das ist mir eher unsinnig. –
Auch wenn Sie das nicht getan haben, geben Sie ein 'Class'-Objekt buchstäblich an etwas zurück, das an eine Instanz dieser' Class' übergeben wird. Irgendwo in Ihrer Pool-Klasse müssen Sie dieses Objekt instanziieren, wahrscheinlich durch die stdlib 'Type'. –
Beachten Sie die Zeile im ursprünglichen Code, die besagt: items [i] = new type() '. Das ist tatsächlich ein Objekt dieser Klasse instanziieren. Du bist nicht. –