我正在用 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);
}
}
“子弹”和“敌人”都是扩展 Sprite 类的类。我的问题是:是否可以将这两种方法合并为一种同时处理子弹和敌人的方法,具体取决于哪一种方法作为参数传递?
[编辑] 我想到的是这样的:(伪代码)
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);
[/编辑]
换句话说,是否有一种语法允许访问向量和/或类(对象池)而无需将它们的名称硬编码到方法中?
提前感谢您的帮助。