Форум 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)
-   -   Стоп-кадр в AS (http://www.flasher.ru/forum/showthread.php?t=82040)

Tigor 04.07.2006 04:17

Стоп-кадр в AS
 
Доброго дня всем!
Я столкнулся с проблемой качественного скрипта для создания стоп-кадра клипа на определённое время. Скрипт пишется в одном кадре (т.е. временная шкала не используется).
Написал рекурсивную функцию, но она работает неправильно (функция не останавливается и Flash просто-напросто вылетает). Может кто подскажет ошибку:

Код:

trace(timer(10));
function timer(j:Number) { // j время задержки, пересылаемое в функцию
        var i:Number = 0; // i количество секунд, прошедших после запуска
        while (i<j) {
            i++;               
            var time:Number=setInterval(timer, 1000, j);               
        }
        clearInterval(time);
        return i;
};


iNils 04.07.2006 12:14

Честно говоря я не понял, что вы хотите получить.

motor4ik 04.07.2006 13:06

а что вам мешает сделать стоп в клипе указано и запустить его через заданое время в сетИнтервале????

Код:

clip1.stop();

var time:Number=setInterval(function st():Void{
clip1.play();
 clearInterval(time);
}, 1000);


etc 04.07.2006 13:29

Цитата:

Сообщение от Tigor
Скрипт пишется в одном кадре (т.е. временная шкала не используется).

Ты себе противоречишь =)

iNils 04.07.2006 14:10

Цитата:

Сообщение от motor4ik
а что вам мешает сделать стоп в клипе указано и запустить его через заданое время в сетИнтервале????

Код:

clip1.stop();

var time:Number=setInterval(function st():Void{
clip1.play();
 clearInterval(time);
}, 1000);


это работать не будет :)

Код:

_global.pauseClip = function (clip, time) {
        clip.stop ();
        var id = setInterval (function () {
                clip.play ();
                clearInterval (id);
        }, time);
}

Пример использования:
Код:

pauseClip (this, 1000);

motor4ik 04.07.2006 14:38

конечно не будет, я опять же повторюсь, не просто списал, а списал и подумал почему не работает...исправил заработало, не исправил оправляемся в начальную школу учить правописание )

iNils 04.07.2006 14:44

Цитата:

Сообщение от motor4ik
конечно не будет, я опять же повторюсь, не просто списал, а списал и подумал почему не работает...исправил заработало, не исправил оправляемся в начальную школу учить правописание )

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

Tigor 05.07.2006 13:47

Спасибо всем, кто отозвался на мою тему. Получить хочется очень простую вешь - функцию остановки скрипта на заданное время и, далее, продолжение его выполнения. Заранее отказался от вариантов пустых циклов. Вариант с onEnterFrame тоже не дал нужных результатов. Была мысль с использованием getTimer, но в этом случае выполнение скрипта делает плейер "невменяемым", выбивая его на это время. Появился ещё один вариант. Логически рассуждая, рабочий, но и тут заковыка имеется. Вот он:
Код:

if (!i) {
        var i:Number = 0;
}
function func(i) {
        i++;
        trace(i);
        return i;
}
setInterval(func, 1000, i);

Это вариант без проверки на соответствие интервалу. Пусть бы выдавал секундные метки, но по возрастанию. А в результате получаю лишь 1.
Может кто подскажет рецепт, или хотя бы направление ...выпишет :)

motor4ik 05.07.2006 14:00

пиши скрипт по функциям или по кадрам...и запускай соответственно через сет Интервал других способов нет...будет всеровно работать некорректно чтобы ты не придумал!!!!

iNils 05.07.2006 14:04

Tigor, я дал ответ в 5-ом посте.

motor4ik 05.07.2006 14:38

ему нужно и код останавливать...я ему предложил т.к. он знает где паузы разбивать код или на функции или на разные кадры вешать и переходить в функцию или кадр по сетИнтервалу

iNils 05.07.2006 14:50

Цитата:

Сообщение от motor4ik
ему нужно и код останавливать...я ему предложил т.к. он знает где паузы разбивать код или на функции или на разные кадры вешать и переходить в функцию или кадр по сетИнтервалу

А если у него сторонний setInterval запущен?
Такие вещи надо заранее продумывать.

motor4ik 05.07.2006 15:04

действительно...все продумывает пусть )

Tigor 05.07.2006 20:46

Я польщён таким вниманием к моей проблеме. Спасибо всем за помошь.:yahoo:
О 5-м посте. Теоретически всё правильно, но когда попробовал получить результат от функции, вставив getTimer до начала обращения к setInterval и после возвращения из функции, я получил одинаковый результат, даже если выставлял задержку в 10000мс. Вот мой вариант:
Код:

attachMovie("1", "my_clip", 0); //включаю клип 1
_global.pauseClip = function(clip, time) {
        clip.stop();
        var id = setInterval(function () {
                clip.play();
                clearInterval(id);
        }, time);
        trace("Stop "+getTimer());
        return;
};
trace("Start "+getTimer());
pauseClip(my_clip, 10000);

или я что-то неправильно сделал. :bye:

iNils 05.07.2006 21:03

Мой скрипт останавливает анимацию в таймлайн, а не выполнение кода. Поставь трейс в следущий кадр клипа, который следует после его остановки.

Tigor 05.07.2006 21:50

Спасибо всем за советы. Я всё-таки хотел бы решить вопрос без подключения timeline.
Можно пойти по пути методов класса Date(), но, боюсь, точность будет ещё ниже, чем при использовании onEnterFrame.
Я совсем недавно во Flash-е и со многим сталкиваюсь впервые, многого не знаю... Вроде такая банальная вешь - останов на определённое время сценария... Неужели никто, при тенденции централизации кода в Action Script, ни разу не сталкивался с такой задачей?
А если так, то может стоит обратиться к разработчикам в Adobe?


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

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