我一直在努力,現在兩晚做到這一點,並沒有任何的喜悅,如果你能請幫助...刪除陣列以及它與鼠標點擊的內容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);
}
}
}
}
'balls.splice(0);'應該足夠了。你爲什麼要兩次調用'splice'然後在一個循環中? 'splice'接受起始索引和'deleteCount',如果你忽略所有元素的默認值。如果您需要一次移除一個項目,則可以使用「pop」或「shift」方法。 – dirkgently
感謝您的迴應dirkgently,我沒有嘗試balls.splice(0);在它自己和它沒有工作,我有它在一個循環中,因爲有人建議它可能有所幫助,你在代碼中看到的是拼命試圖讓它工作,爲什麼會balls.splice(0);不行?有任何想法嗎? – johnp
嘗試'array.splice()'即沒有索引。或者,'array.length = 0'。 (我不知道爲什麼它不起作用。)檢查你的數組的大小(即它不是零)。如果前兩個不起作用,你可以嘗試在循環中使用'pop'一次刪除一個項目嗎? (var inter:int = balls.length-1; inter> -1; inter--) – dirkgently