私はこのようなクラスグーを持っている:ActionScript 3のサブクラスメソッドの継承問題
public class Goo extends Node
{
public function Update(dt:Number):void
{
// function to be overriden
trace("updating Goo");
}
}
とグーのサブクラスはGooXと呼ばれる:
public class GooX extends Goo
{
override public function Update(dt:Number):void
{
trace("updating GooX");
}
}
とGooYと呼ばれる別:
public class GooY extends Goo
{
override public function Update(dt:Number):void
{
trace("updating GooY");
}
}
、次にGooオブジェクトを作成して次のように更新するマネージャ:
public class Manager
{
private var gooArray:Vector.<Goo> = new Vector.<Goo>();
public function Manager():void
{
var aGoo:Goo;
if (Math.random() >= 0.5)
{
aGoo = new GooX();
}
else
{
aGoo = new GooY();
}
gooArray.push(aGoo);
}
public function Update(dt:Number):void
{
for (var i:int = 0; i < gooArray.length; i++)
{
gooArray[i].Update(dt);
}
}
}
このコードでは、トレースログに常に「Gooの更新」が表示されます。 gooArray[i] is GooX
またはgooArray[i] is GooY
を使ってどのタイプのものであるかを検出しようとしましたが、両方とも常にfalse
です。私がgooArray[i] as GooX
でキャストを強制したとしても、常にと言うと、オブジェクトはnull
となります。
誰も私がやろうとしていることをやっていることを知っていますか?(親クラスの代わりに子クラスの更新を呼び出させる)ありがとう。
あなたがここに投稿したコードをちょうど入れておくと、ほぼ同じ結果が得られません。オーバーライドされたメソッドは私のために呼び出されるので、あなたは何か他のことが起こっていると思います。 –
クラスは私のためにうまく動作します。 Flash Player 11.0.1.152は、Flex 4.1 SDKでFlashBuilderでコンパイルされています。取得する出力は「GooXを更新する」です。私がENTER_FRAMEループにそれを接続すると、私はGooXとGooYの間にかなり均等に分散します。 – meddlingwithfire
これは変だけど、Flex SDK 4.1とFlash Player 11でFlash Builder 4.6を使用しています。動作しません。 – jglievano