我對haxe openfl非常陌生,我曾經用flash和starling開發遊戲,我對從flash轉換爲openfl haxe感到困惑。Haxe Starling對象池與動態對象類型
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;
}
}
下面是李布賴姆洛創建八哥池類我不知道我怎樣才能將其轉換爲HAXE,
我試着像 -
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;
}
}
但我沒有作用,也許我不是鑄造得當, 例如 -
pool = new StarlingPool(Bullet, 100);
var b:Bullet = cast(pool.getSprite()); //or
var b:Bullet = cast(pool.getSprite(),Bullet)
您將項目定義爲'Array',然後將其重新定義爲'Array >'? 這對我來說是無稽之談。 –
即使你沒有這樣做,你實際上會返回一個'Class'對象到一個正在被轉換到'Class'實例的對象。在你的池類中的某個地方,你需要實例化該對象,可能通過'Type' stdlib。 –
注意原始代碼中表示'items [i] = new type()'的行。這實際上是實例化該類的一個對象。你不是。 –