我一直在努力,现在两晚做到这一点,并没有任何的喜悦,如果你能请帮助...删除阵列以及它与鼠标点击的内容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