2013-05-01 4 views
0

нормально, у меня есть этот код на раме 1удаление мувиклип после казнены

addEventListener(Event.ENTER_FRAME, changeframe); 

function changeframe(event:Event):void 
{ 
btsakhir.y -= 6; 

if (btsakhir.y <= 56) 
{ 
    nextFrame(); 
} 
} 

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

ответ

1

Что происходит, когда вспышка переходит к следующему кадру , обработчик событий Event.ENTER_FRAME все еще запущен. И он ожидает, что есть объект, называемый «btsakhir» с свойством y. Вы можете проверить это, добавив трассировку в свой метод changeFrame(), и вы должны увидеть, что она все еще отслеживает, даже если она находится на следующем кадре.

Две вещи, которые вы могли бы сделать:

1.) изменить обработчик события (ваш changeframe() метод) для проверки и счета, когда «btsakhir» больше не существует на следующем кадре. Это может стать немного грязным и не рекомендуется в зависимости от того, как вы это сделаете.

Или

2.) удалить слушатель события, так что он не работает на всех, когда вы идете к следующему кадру. Если весь метод changeframe() делает проверку свойства «btsakhir» y, это, вероятно, лучший способ пойти. Чтобы удалить слушателя событий, вы можете добавить:

this.removeEventListener(Event.ENTER_FRAME, changeframe); 

Вы бы добавили его непосредственно перед тем, как вызвать nextFrame();


Конечно, если ваш объект «btsakhir» должен существовать на следующем кадре (и является объектом на шкале времени/этапа), просто добавлять рамки к нему.

+0

он работал, но removeEventListener должен быть размещен сразу после следующего кадра btw thanks –