Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   проиграть мув клип с конца в начало (http://www.flasher.ru/forum/showthread.php?t=67370)

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

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

Король 01.08.2005 14:49

Цитата:

Сообщение от Whatsername
Очевидно, что stop() в первом кадре нужен для того, чтобы не прорисовывать этот кадр.

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

iNils 01.08.2005 14:51

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

D12 01.08.2005 23:39

Вложений: 1
годится ???? ;)

Whatsername 02.08.2005 12:12

Цитата:

Сообщение от iNils
вставить trace(this._currentframe) перед if (this._currentframe == 1) {.

Это работает. Спасибо за ответ. Но я таки не вникаю. Сперва выполняется код _root, потом клипа, потом обработчика события клипа. Затем кадр рисуется. Так?

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

iNils 02.08.2005 12:39

Цитата:

Сообщение от Whatsername
Сперва выполняется код _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

Вложений: 1
вот...

Whatsername 03.08.2005 14:22

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

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

iNils 03.08.2005 14:57

Вложений: 1
Вот файл. Уменьшил 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, прими мои лобзанья =))
Огромное спасибо!


Часовой пояс GMT +4, время: 23:47.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.