2012-06-10 20 views
1

我一直在努力,現在兩晚做到這一點,並沒有任何的喜悅,如果你能請幫助...刪除陣列以及它與鼠標點擊的內容AS3的Flash CS5.5

簡單的投擲遊戲與飛鏢和其他武器,我正在嘗試做的是 當我更換武器時,刪除一個陣列及其所有的孩子,

我確信有一個簡單的代碼片段,將刪除所有的孩子和數組沒有麻煩,但我還沒有弄明白,如果你知道或可以提出任何建議,我會非常感激。

類似於「removeArrayAndAllInstances(balls);」如果只是...... 此刻我有......(球是有問題的陣列)

for(var inter:int = balls.length - 1; inter > -1; inter--) 
     { 
     balls.splice(1); 
     balls.splice(1, balls.length); 
     } 

但出於某種原因,這講解員的工作,該陣列及其所有的孩子都還上階段。

我也試過

balls[]; 

沒有運氣...

請不要評判我的代碼我是新手我肯定是顯而易見的,我知道它的令人作嘔的爛攤子,對不起(它是唯一對我有意義的方法)。

我已經試過無數的事情,希望有人能幫助

在此先感謝.....

var mouseTarget:MovieClip; 
var balls:Array = new Array(); 
var ball:MovieClip = new dart(); 
var hammers:MovieClip = new hammer(); 
ball.x = 150; 
ball.y = 50; 

hammer_btn.addEventListener(MouseEvent.MOUSE_DOWN, hammerweapon); 
dart_btn.addEventListener(MouseEvent.MOUSE_DOWN, dartweapon); 

function removealldartsfromstage(e:MouseEvent):void 
{ 
    for(var inter:int = balls.length - 1; inter > -1; inter--) 
    { 
    balls.splice(1); 
    balls.splice(1, balls.length); 
    } 

    stage.removeEventListener(MouseEvent.MOUSE_UP, addDart);  
} 
function dartweapon(e:MouseEvent):void 
{ 
    stage.removeEventListener(MouseEvent.MOUSE_UP, addHammer); 
    dart_btn.removeEventListener(MouseEvent.CLICK, dartweapon); 
    stage.addEventListener(MouseEvent.MOUSE_UP, addDart); 
    //removeChild(balls); 

} 
function hammerweapon(e:MouseEvent):void 
{ 
    stage.removeEventListener(MouseEvent.MOUSE_UP, addDart); 
    dart_btn.addEventListener(MouseEvent.MOUSE_DOWN, dartweapon); 
    //stage.addEventListener(MouseEvent.MOUSE_UP, addDart); 
    stage.addEventListener(MouseEvent.MOUSE_UP, addHammer); 

} 


function addHammer(e:MouseEvent):void 
{ 
    var hammers = new hammer(); 
    addChild(hammers); 
    removeChild(dart_btn); 
    addChild(dart_btn); 
    dart_btn.addEventListener(MouseEvent.CLICK, dartweapon); 
    balls.splice(10); 
} 

function addDart(e:MouseEvent):void 
{ 
    str.alpha = 0; 
    var ball = new dart(); 
    addChild(ball); 
    removeChild(hammer_btn); 
    addChild(hammer_btn); 
    ball.x = 150; 
    ball.y = 50; 
    balls.push(ball); 
    trace(balls); 
    addEventListener(Event.ENTER_FRAME, checkIfHitTest); 
    hammer_btn.addEventListener(MouseEvent.MOUSE_DOWN, removealldartsfromstage); 
    function checkIfHitTest(Event) 
    { 
     for (var i:int = 0; i<balls.length; i++) 
     { 
      if (balls[i].dart_point.hitTestObject(eyeleft)) 
      { 
       trace("hitleftbullseye"); 
       ball.gotoAndStop("hitlefteyeframe"); 
       Event.currentTarget.removeEventListener(Event.type, checkIfHitTest); 
       balls.splice(i, 1); 
      } 

     } 
    } 
} 
+0

'balls.splice(0);'應該足夠了。你爲什麼要兩次調用'splice'然後在一個循環中? 'splice'接受起始索引和'deleteCount',如果你忽略所有元素的默認值。如果您需要一次移除一個項目,則可以使用「pop」或「shift」方法。 – dirkgently

+0

感謝您的迴應dirkgently,我沒有嘗試balls.splice(0);在它自己和它沒有工作,我有它在一個循環中,因爲有人建議它可能有所幫助,你在代碼中看到的是拼命試圖讓它工作,爲什麼會balls.splice(0);不行?有任何想法嗎? – johnp

+0

嘗試'array.splice()'即沒有索引。或者,'array.length = 0'。 (我不知道爲什麼它不起作用。)檢查你的數組的大小(即它不是零)。如果前兩個不起作用,你可以嘗試在循環中使用'pop'一次刪除一個項目嗎? (var inter:int = balls.length-1; inter> -1; inter--) – dirkgently

回答

1

的球陣列僅僅是球引用的存儲。它與舞臺或DisplayObjectContainer完全沒有關係。所以你必須逐個刪除它們。

這是我會怎麼做:

while(balls.length > 0) 
{ 
    var ball:MovieClip = balls.pop(); 
    if (ball.parent) // Just to make sure you are referencing the correct container. 
    { 
     ball.parent.removeChild(ball); 
    } 
} 

我跟不上你的遊戲的邏輯非常好。也就是說,爲了更容易管理它們,你最好創建一個單獨的剪輯組。例如,在創建階段:

var ballContainer:Sprite = new Sprite(); 
addChild(ballContainer); 
for (var i:int = 0; i < ballLimit; i++) 
{ 
    var ball:Dart = new Dart(); 
    ballContainer.addChild(ball); 
} 

這種方式,可以清除他們的孩子都在一次:

function removeAllChildren(container:Sprite) // Or just DisplayObjectContainer 
{ 
    while(container.numChildren > 0) 
    { 
     container.removeChild(container.getChildAt(0)); 
    } 
} 
+0

啊,這很有道理,非常感謝erkmene,我認爲它幾乎在那裏,舞臺上的實例現在閃爍並重新出現,所有的孩子也仍然在舞臺上,但我認爲我們越來越近了,至少我們清楚地與陣列進行了長時間的溝通謝謝! – johnp

+0

對不起,我有MOUSE_DOWN,沒有點擊,這修復了閃光,你知道我是如何刪除其他兒童? – johnp

+0

感謝您的幫助erkmene,非常明確的幫助說明。 – johnp

相關問題