私はActionScript3でスペースインベーダーのようなゲームを作成しており、ステージから弾丸を削除するメソッドを作成しました。
private function removeBullet(bb:Bullet = null):void {
var leng:uint = bulletVector.length;
if (bb)
{
for (var i:uint = 0; i < leng; i++)
{
if (bulletVector[i] == bb)
{
bulletVector.splice(i, 1);
break;
}
}
// Remove bullet from the Display List
removeChild(bb);
// Return the bullet to its object pool
bulletPool.returnObject(bb);
} else {
// Remove all existing bullets currently on screen
for (var j:uint = 0; j < leng; j++)
{
var bullet:Bullet = bulletVector[j];
removeChild(bullet);
bulletPool.returnObject(bullet);
}
bulletVector.splice(0, leng);
}
}
bulletVectorは、現在表示されているすべての弾丸を含むVectorであり、bulletPoolは、ステージで使用されなくなった弾丸を返すオブジェクトプールクラスです。メソッドに引数が渡されない場合、メソッドは画面上のすべての箇条書きを削除します。
今、私は画面から敵を取り除くための同じ方法を持っています:
private function removeEnemy(ee:Enemy = null):void {
var leng:uint = enemyVector.length;
if (ee)
{
for (var i:uint = 0; i < leng; i++)
{
if (enemyVector[i] == ee)
{
enemyVector.splice(i, 1);
break;
}
}
// Remove enemy from the Display List
removeChild(ee);
// Return the enemy to its object pool
enemyPool.returnObject(ee);
} else {
// Remove all existing enemies currently on screen
for (var j:uint = 0; j < leng; j++)
{
var enemy:Enemy = enemyVector[j];
removeChild(enemy);
enemyPool.returnObject(enemy);
}
enemyVector.splice(0, leng);
}
}
'bullets'と'enemies'はどちらも、Spriteクラスを拡張するクラスです。私の質問は、これら2つのメソッドを、どちらが引数として渡されるかに応じて、弾丸と敵の両方を処理するメソッドにマージすることは可能ですか?
[編集]私が考えているのは次のようなものです:(擬似コード)
if (ee is Bullet)
{
var s:String = "bullet"
} else if (ee is Enemy)
{
var s:String = "enemy"
}
eval[s+"Vector"].splice(i, 1);
eval[s+"Pool"].returnObject(ee);
[/編集]
言い換えると、名前をメソッドにハードコーディングしなくても、ベクターやクラス(オブジェクトプール)にアクセスできる構文はありますか?
助けてくれてありがとう。