PDA

Просмотр полной версии : Событие на покидание кадра


motor4ik
06.12.2005, 15:11
Если какое нибудь событие на покидание кадра, чтобы обработку его можно было написать в самом кадре.


Ну допустим есть n кадров, stop() в первом, и вот перейти на другой кадр мы можем разными способами, там на кнопке висит событие на стрелке итд, так вот как только уйдем с этого кадра можно как-нить проследить?

заранее спасибо

Nirth
06.12.2005, 16:50
если я правильно тебя понял тебе нужно засечь когда мувик начнет анимацию?(тоесть уйдет из stop() кадра).
один из самых явных способов, это вызывать для этого функцию

playMovie() {
myMovie.gotoAndPlay(2);
__notifyAll();
}

метод __notifyAll(); собственно должен сообщать всем, о том что функция запущена(следовательно мувик играет, и вышел и стоп кадра)
можно сделать это через EventDispatcher\AsBroadcaster (чтобы события были настоящие)

второй способ, это поставить аналогичный метод на второй кадр.

motor4ik
06.12.2005, 17:36
спасибо, буду разбираться...вообщем смысл в чем..

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

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

motor4ik
06.12.2005, 17:39
да ,я понял что ты предлагаешь...я так впринципе и буду делать...просто в этой функции __notifyAll(); буду удалять созданные мувики, но просто, они создаются только в одном из 10ти кадров...ну и фиг с ним впринципе :=) спасибо :=)

kruasan
06.12.2005, 17:43
Если же речь идет о перехвате перехода с произвольного кадра на произвольный кадр, то ничичего другого в голову не приходит кроме как:

myMovie.stop();
var frameNum = myMovie._currentframe;
myMovie.onEnterFrame=function()
{
if(this._currentframe != frameNum)
{
__notifyAll();
delete this.onEnterFrame
}
}

Сам не люблю onEnterFrame...
Кстати в АС3 вроде ввели событие, генерируемое при покидании кадра.

motor4ik
06.12.2005, 17:46
спасибо :=) тоже такой вариант рассматривался :=)

Nirth
06.12.2005, 19:37
нелюблю подобные вещи на онЕнтерФрейм вставлять...

kruasan
07.12.2005, 02:45
Пока не знаю как отловить это по другому... Подразумевается самый общий случай: счит. головка покидает кадр, причем мы незнаем куда она направилась, незнаем также что послужило возбудителем этого события.

Спасибо моторчику за интересный вопрос...

Король
07.12.2005, 03:04
а в директоре есть onExitFrame
вот она, сила!

kruasan
07.12.2005, 03:10
Решение для более узкого случая...
Если мы собираемся отловить уход из КОНКРЕТНОГО заранее известного кадра в ПРОИЗВОЛЬНЫЙ кадр по НЕИЗВЕСТНЫМ причинам, то в этот кадр можно просто положить прозрачный мувик empty_mc и прописать там же:

empty_mс.onUnload = function(){__notifyAll()}

2 Motor4ik
Собственно это и есть ответ на твой вопрос

Nirth
07.12.2005, 04:56
ну и нравиться же вам вешать обработчики событий на каждый кадр, и кидать пустые мувики =) функцию всеже легче написать.и через нее запускать

Штрек
07.12.2005, 04:58
вобщем у меня в кадре создаются клипы программно, так вот если перейду в другой кадр они останутся,а мне их нужно удалить...так вот чтобы не прописывать удаление при нажатии на каждую кнопку я думал может можно написать в кадре...если происходит событие ухода из кадра, удалить созданные мувики... вот так...
MovieClip.prototype.uhod = function() {
var cf = this._parent._currentframe;
this.createEmptyMovieClip('obr', this.getNextHighestDepth());
this.obr.onEnterFrame = function() {
if (this._parent._parent._currentframe != cf) {
this._parent.swapDepths(1000);
this._parent.removeMovieClip();
this.removeMovieClip();
}
};
};

motor4ik
07.12.2005, 11:14
2 kruasan ^ отличный вариант мне очень понравился, спасибо. По поводу вопросов, всегда стараюсь задавать только интересные всем темы, иногда конечно они бывают сложные в решении, и я просто напросто не дожидаюсь ответа, решаю проблему как то сам...но здесь спасибо, действительно удобное решение...

2 Nirth ^ а как через функцию? писать эту функцию потом во все кнопки или другие обработчики переходов с кадра? ну это проблема, куданибуть да забудешь, да и когда кнопок оч. много , то это уже реально проблема, а так один мувик в кадр кинул и ок :=)

2 Шрек ^ вариант круасана все же будет попроще :=) но всеровно спасибо за еще один вариант решения :=)

kruasan
08.12.2005, 16:43
ну и нравиться же вам вешать обработчики событий на каждый кадр, и кидать пустые мувики =) функцию всеже легче написать.и через нее запускать
А как в данном случае это сделать через функцию (без онЕнтерФрейма разумеется)? Мне самому интересно.
Нету во флеше события на уход из кадра хоть убей. Следовательно надо фиксировать какие-то признаки ухода из кадра (в неизвестный кадр, неизвестно почему). А это либо анлоуд мувика, сидящего только в этом кадре, либо проверка _каррентфрейм через тупой онЕнтерФрейм.