PDA

Просмотр полной версии : проиграть мув клип с конца в начало


vstorm
01.08.2005, 14:11
есть возможности в AS
flash 5.0
заранее благодарен!

iNils
01.08.2005, 14:22
на клип с анимацией ставишь код
onClipEvent (enterFrame) {
if (this._currentframe == 1) {
this.gotoAndStop (this._totalframes);
} else {
this.gotoAndStop (this._currentframe - 1);
}
}
В самом клипе в первом кадре ставишь stop();

Whatsername
01.08.2005, 14:36
Очевидно, что stop() в первом кадре нужен для того, чтобы не прорисовывать этот кадр. Только мне не понятно как это работает, ведь есть проверка
this._currentframe == 1
дающая при выводе первого кадра true. И есть подынструкция
this.gotoAndStop(this._totalframes)
напрявляющая головку в последний кадр, не прорисовывая настоящий.

iNils, разреши, пожалуйста, этот казус в моей голове.

iNils
01.08.2005, 14:47
В примере есть клип с анимацией на 6 кадров.
Если убрать stop то последовательность кадров 1 6 5 4 3 2 1 6 ....
Со stop 6 5 4 3 2 1 6 ....

Король
01.08.2005, 14:49
Очевидно, что stop() в первом кадре нужен для того, чтобы не прорисовывать этот кадр.

интересная теория

iNils
01.08.2005, 14:51
На самом деле без stop сразу начинается проигрываение ролика и код проверки срабатывает только на втором кадре. Это можно увидеть если вставить trace(this._currentframe) перед if (this._currentframe == 1) {.

D12
01.08.2005, 23:39
годится ???? ;)

Whatsername
02.08.2005, 12:12
вставить trace(this._currentframe) перед if (this._currentframe == 1) {.
Это работает. Спасибо за ответ. Но я таки не вникаю. Сперва выполняется код _root, потом клипа, потом обработчика события клипа. Затем кадр рисуется. Так?

UPD: а еще твой исходник без *.fla, но все равно спасиба =)

iNils
02.08.2005, 12:39
Сперва выполняется код _root, потом клипа, потом обработчика события клипа. Затем кадр рисуется. Так?
Легко проверить. В руте пишешь trace ("root1"), слоем ниже клип с кодом onClipEvent(load){trace("clipEvent")} и еще слоем ниже trace ("root2"). Внутри клипа trace ("clipInside"). Запускаешь и смотришь последовательность.
а еще твой исходник без *.fla, но все равно спасиба =) Бывает :)

Fokker
02.08.2005, 14:54
2 D12
фигурные скобочки забыли поставить в if
не понял что такое
go и !go разъясните плиз....

2 iNils
умом понимаю,что код верен и должен работать...но на практике не фига у меня не работает (почему-то)..может скинете fla шку

iNils
02.08.2005, 15:04
вот...

Whatsername
03.08.2005, 14:22
Не понимать я твой подход.
Пытаюсь проверить исполняется ли enterFrame при входе в первый кадр, вроде бы и не исполняется, и это все объясняет. Раскрой мне веки.

А потом, первый такт смены кадров происходит ~ раз в 10 быстрее установленного. Не замечал?

iNils
03.08.2005, 14:57
Вот файл. Уменьшил fps до 1, чтобы успеть увидеть что происходит. Запусти с stop() и без него. А я сейчас напишу логику действий.

iNils
03.08.2005, 15:17
Вариант 1. Без stop();

Лог при запуске:
_root
сработал _root
код кадра 1, _currentframe : 1
сработал код на первом кадре внутри клипа, текущий кадр 1. stop нет, поэтому головка воспроизведения переходт дальше
enterFrame, _currentframe : 2
сработал код на клипе внутри enterFrame, но текущий кадр уже 2. срабатывает код this.gotoAndStop (this._currentframe - 1), то есть со второго кадра переходим на 1
код кадра 2, _currentframe : 1
... но надо обработать код и второго кадра, хотя головка уже перескочила на первый и поэтому ...
код кадра 1, _currentframe : 1
... опять срабатывает код первого кадра
... следущие кадры
enterFrame, _currentframe : 1
enterFrame, _currentframe : 10
enterFrame, _currentframe : 9


Вариант 2. С stop();

Лог при запуске:
_root
сработал _root
код кадра 1, _currentframe : 1
сработал код на первом кадре внутри клипа, текущий кадр 1. stop есть, поэтому головка воспроизведения не двигается
enterFrame, _currentframe : 1
сработал код на клипе внутри enterFrame. срабатывает код this.gotoAndStop (this._totalframes), то есть со первого кадра переходим на 10
если бы внутри клипа мы поставили (я забыл) на 10 кадр код trace("код кадра 10, _currentframe : " + this._currentframe), то тут у нас был бы еще лог:
код кадра 10, _currentframe : 10
... следущие кадры
enterFrame, _currentframe : 10
enterFrame, _currentframe : 9
enterFrame, _currentframe : 8

Whatsername
03.08.2005, 15:21
iNils, ты чудо! Спасибо.

Вот это меня вводит в ступор:
код кадра 2, _currentframe : 1

UPD: запостил, не видя твоего сообщения. Сейчас изучу твои поиски. Большое спасибо.

Whatsername
03.08.2005, 17:46
iNils, прими мои лобзанья =))
Огромное спасибо!