我想提出一個太空入侵者一種基於ActionScript3比賽,我已經創建了從舞臺中刪除子彈的方法一種方法:去除不同類型的對象從AS3的階段,只用
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);
[/編輯]
換句話說,有沒有語法,允許訪問的載體和/或類(對象池),而不必將其名稱硬編碼到方法中?
在此先感謝您的幫助。
其實這比我建議的要聰明得多。只有在添加新類型時需要編輯該方法。 – JulianG
當ee爲空時,你不知道你是否想要移除所有的子彈或所有的敵人。 我建議有一個單獨的removeAll方法,因爲它會更安全。 – JulianG
現在我想起它......執行//刪除敵人和/刪除子彈會是什麼樣子?我想他們會兩個幾乎相同的代碼塊... – JulianG