#flash #actionscript-3 #adobe
#flash #actionscript-3 #adobe
Вопрос:
Что у меня есть это:
var ster:Array;
ster = new Array();
stage.addEventListener(Event.ENTER_FRAME, groente);
function groente(event:Event)
{
if(Math.round(Math.random()*140) == 1)
{
ster.push(new groente1_MC());
addChild(ster[ster.length-1]);
ster[ster.length-1].x = machine.x
ster[ster.length-1].y = machine.y
ster[ster.length-1].scaleX = 0.2;
ster[ster.length-1].scaleY = 0.2;
}
for(var i:int = 0; i < ster.length-1; i )
{
ster[i].y = ster[i].y 5;
if( hero.hitTestObject(ster[i]) ) {
ster[i].visible = false;
score = score 1;
Score.text = "" score;
}
}
}
Теперь проблема в том, что после перехода к следующему кадру. Я все еще вижу groente1_MC. И на моей стадии все еще появляются новые. Как я могу удалить все это и прекратить их создание после перехода к следующему кадру?
Комментарии:
1. Не могли бы вы кое-что уточнить — в настоящее время ваши экземпляры groente1_MC перемещаются в каждом кадре и иногда создаются новые экземпляры. Когда вы говорите, что переходите к следующему кадру, вы имеете в виду следующий экран вашей игры?
2. Когда вы завершаете игру. У меня есть эта строка и для другого объекта, но затем, после 5 обращений. вы вернетесь к главному экрану, чтобы «воспроизвести» его снова. к сожалению, при возврате к этому кадру. Я все еще вижу эти объекты (этот код находится в Frame3. И я возвращаюсь к Frame1)
Ответ №1:
Вам нужно удалить прослушиватель ENTER_FRAME, чтобы остановить перемещение и создание объектов, затем выполнить цикл по массиву, удаляя каждый объект со сцены, прежде чем очищать массив:
function clearStage():void
{
stage.removeEventListener(Event.ENTER_FRAME, groente);
for each(var mc:groente1_MC in ster) {
removeChild(mc);
}
ster = [];
}
Комментарии:
1. извините, не хватает пробела. Это должно быть
for each
Ответ №2:
попробуйте
for(var i:int = ster.length -1; i >= 0; i--)
{
ster[i].y = ster[i].y 5;
if( hero.hitTestObject(ster[i]) ) {
ster[i].visible = false;
score = score 1;
Score.text = "" score;
removeChild(ster[i]);
ster.splice(i, 1);
}
}
пример:
var ar:Array = [0,1,2,3,4,5,6,7,8,9,10]
for(var i:int = ar.length - 1; i >= 0; i--){
if(i % 2 == 0){
tf.text = i ' : ' ar[i] 'n';
ar.splice(i,1);
}
}
tf.text = 'so : ' ar.join(', ');
tf.text
является
10: 10
8: 8
6: 6
4: 4
2: 2
0: 0
итак : 1, 3, 5, 7, 9
Комментарии:
1. Просто вопрос по этому поводу: выполняет ли он переоценку ster. длина в начале цикла каждый раз? Не будет ли ster.splice изменять длину ster, и цикл будет делать странные вещи? Я просто помню, что однажды у меня было что-то подобное в Java, но это могло быть для каждого цикла