Удалить таймер объекта, созданного в цикле - PullRequest
2 голосов
/ 19 мая 2011

Я хочу удалить объект, созданный в цикле, с таймером.

var timer:Timer = new Timer(2000);
timer.addEventListener(TimerEvent.TIMER, voegtoe);

В функцию voegtoe я добавляю объект Movieclip с именем man:

man.x=Math.random()*650;
man.y=Math.floor(Math.random()*(70))+350;
addChild(man);

Я хочу удалить этот объект через 2 секунды. Проблема состоит в том, что существует несколько «мужских» объектов.

Может ли кто-нибудь мне помочь?

Спасибо.

Ответы [ 4 ]

1 голос
/ 19 мая 2011

Хранение объектов Movieclip внутри массива облегчит обращение к ним позже.

var man:Array = new Array();

for (var i:int=0; i<10;i++)
{ 
  man[i] = new Movieclip();
  man[i].x=Math.random()*650;
  man[i].y=Math.floor(Math.random()*(70))+350;
  addChild(man[i]);
}

теперь вы можете ссылаться на позицию массива, в которой расположен ваш mc:

function removeMC(id:int):void
{
  removeChild(man[id])
}
0 голосов
/ 12 июня 2013

Простой способ обратиться ко многим мужчинам - это использовать свойство name и вызывать каждый man.name="man"+i;

. Затем используйте getChildByName("man"+5), чтобы получить любой нужный видеоклип.

0 голосов
/ 20 мая 2011

Это можно сделать несколькими разными способами.

Мое предложение заключается в том, что у вас есть класс для вашего мужчины.В этом классе у вас есть функция, которая запускает removeTimer, и она должна срабатывать при создании человека.Когда 2 секунды истекут, мы удаляем Слушатель события и удаляем его из его родителя.

Таймер, который добавляет людей, должен быть в любом классе, в котором вы хотите создать экземпляр своих людей.1006 * Вот пример

public function initMyTimer() 
{
    var timer:Timer = new Timer(2000);
    timer.addEventListener(TimerEvent.TIMER, voegtoe);
    timer.start();
}

public function voegtoe(e:TimerEvent):void
{
    trace ('set me up');
    var man:Man = new Man;
    man.x=Math.random()*650;
    man.y=Math.floor(Math.random()*(70))+350;
    addChild(man);
    man.setMyRemoveTimer();
}

Теперь ваш класс Man должен иметь эти функции для обработки удаления.Обратите внимание, что мы вызываем setMyRemoveTimer в приведенном выше коде.Вы можете вызвать эту функцию в конструкторе, но я хотел показать здесь ссылку, поэтому я поместил ее в приведенный выше код.Эта функция будет существовать здесь, в классе Man:

public function setMyRemoveTimer():void
{
    var removeTimer:Timer =  new Timer(2000,1);
    removeTimer.addEventListener(TimerEvent.TIMER_COMPLETE, removeMe);
    removeTimer.start();
}


public function removeMe(e:TimerEvent):void
{
    var removeTimer:Timer = e.target as Timer;
    removeTimer.removeEventListener(TimerEvent.TIMER_COMPLETE, removeMe);
    this.parent.removeChild(this);
}

Это всего лишь предложение, много способов сделать это.Если вы создаете много мужчин, я думаю, что идея массива, содержащего этих людей, является хорошей, как было предложено.

Но концепция здесь заключается в том, что если таймер является членом класса Man,EventHandler будет иметь доступ, чтобы удалить слушателя, а также человека из его родителя.

Я не считаю это идеальной реализацией, но я пытался максимально соответствовать вашему текущему дизайну - яне хотел вдаваться в массивы, чтобы учить этому понятию.

0 голосов
/ 19 мая 2011

Вы ищете функцию setTimeout ??

man.x=Math.random()*650;
man.y=Math.floor(Math.random()*(70))+350;
addChild(man);

Установить таймер как:

setTimeout(removeMan, 1000);

Определить вызываемую функцию как:

function removeMan():void
{
  removeChild(man)
}

Это может быть проще, но даже liveocs предлагают использовать таймеробъект (как в ответе Нельсона).

...