Форум 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=65451)

Arhip 10.06.2005 02:30

задержка и зацикливание кадров
 
как можно осуществить такое:
1. идет последовательность кадров. один кадр нужно задержать на определенное количество секунд, затем воспроизведение продолжится.
2. нужно несколько кадров повторить определенное количество раз, затем воспроизведение продолжается как обычно
3. в один из кадров вставлен символ (во флэше он вроде так называется, другими словами - несколько кадров в одном) нужно дождаться, когда символ олностью проигратся, потом воспроизведение продолжается со следующего кадра

KUZEN 10.06.2005 03:04

Пихай в кадр, в котором должна произойти остановка , setInterval и задерживай сколько угодно :)

KUZEN 10.06.2005 03:13

Вот например задержка в десятом кадре на две секунды
Код:

stop();
setInterval(function () {_root.play();}, 2000);


MIX-er 10.06.2005 03:17

1 - в кадр в котором нада задерживаться...
stop();
time = 1000;
var i = setInterval(function () {
play();
clearInterval(i);
trace("идём дальше");
}, time);

2 -
в кадре предидущем первому из повторяемых
var x = o;

в первом из повторяемых кадров
x++;


в последнем из повторяемых кадров
if (x<=10) {
trace(x);
gotoAndPlay(6);
} else {
trace("идём дальше");
}


3 -
на кадре содержащем символ

stop();

на последнем кадре символа

_root.play();

дерзай...))

MIX-er 10.06.2005 03:18

Цитата:

Сообщение от KUZEN
Вот например задержка в десятом кадре на две секунды
Код:

stop();
setInterval(function () {_root.play();}, 2000);


а тормозить ему интервал не нада?? ;)

Nirth 10.06.2005 03:27

Код:

/**
 *        original idea by Silin
 *        @author                Silin
 *        @version        1.0
 */
class orange.utils.DelayEvent
{
        /**
        *        Creating the delay for function or method
        *        @usage                        orange.utils.DelayEvent.create(myMethod,delay)
        *        @param        func                function to delay
        *        @param        delay                delay in ms
        *        @return                        nothing
        */
        public static function create (func : Function, delay : Number) : Void
        {
                var fnct = arguments.shift ();
                var dly = arguments.shift ();
                var id = setInterval (function ()
                {
                        fnct (arguments);
                        clearInterval (id);
                }, dly, arguments);
        }
}

Использование
Код:

function boo() {
        trace("cool");
}
orange.utils.DelayEvent.create(this.boo,2000);

В твоем случае должно быть, что то вроде
Код:

this.stop();
orange.utils.DelayEvent.create(this.play,2000);


KUZEN 10.06.2005 03:35

Цитата:

Сообщение от MIX-er
а тормозить ему интервал не нада?? ;)

Нада полюбасу ... но я щас сам торможу :D уже глаза закрываются ...

MIX-er 10.06.2005 03:46

Цитата:

Сообщение от Nirth
Код:

/**
 *        original idea by Silin
 *        @author                Silin
 *        @version        1.0
 */
class orange.utils.DelayEvent
{
        /**
        *        Creating the delay for function or method
        *        @usage                        orange.utils.DelayEvent.create(myMethod,delay)
        *        @param        func                function to delay
        *        @param        delay                delay in ms
        *        @return                        nothing
        */
        public static function create (func : Function, delay : Number) : Void
        {
                var fnct = arguments.shift ();
                var dly = arguments.shift ();
                var id = setInterval (function ()
                {
                        fnct (arguments);
                        clearInterval (id);
                }, dly, arguments);
        }
}

Использование
Код:

function boo() {
        trace("cool");
}
orange.utils.DelayEvent.create(this.boo,2000);

В твоем случае должно быть, что то вроде
Код:

this.stop();
orange.utils.DelayEvent.create(this.play,2000);


вот погоди я тож так научусь...))) блин..)))

Arhip 10.06.2005 03:48

Цитата:

Сообщение от MIX-er
а тормозить ему интервал не нада?? ;)

Я мяго сказать чайник в это вопросе. Наверное я правильно понял Вас, в любом случае назрел другой вопрос -
При компиляции можно задать время проигрывания кадров. Например - 20 кадров можно проиграть за 5 секунд, а можно за 20. Как организовать задержку, скажем не на 2 секунды, а на 5 кадров?

KidsKilla 10.06.2005 03:50

у potapenko есть класс Conv
те он нужен.

silin 10.06.2005 19:55

2Arhip >>Как организовать задержку, скажем не на 2 секунды, а на 5 кадров?
Код:

var n=5;
this.stop();
this.onEnterFrame=function(){
        if(!n--){
                this.play();
                delete n;
                delete this.onEnterFrame;
        }
}

2Nirth
спасибо, канеш, тока идея как бы не моя, я там мимо проходил..
к слову в приведенном тобой варианте передать можно тока один аргумент
вот так поскдаднее будет, имхо
Код:

function create ()        {
                var fnct = arguments.shift ();
                var dly = arguments.shift ();
                var id = setInterval (function (a){
                        fnct.apply(null,a);
                        clearInterval (id);
                }, dly, arguments);
}
//////////////////////
f=function(a,b){
        trace(a)
        trace(b)
}
create(f,1000,'a','b')


Nirth 10.06.2005 20:07

оффтоп : ты вставил последнее слово=)
спасибо.

Штрек 11.06.2005 01:33

Цитата:

Сообщение от KidsKilla
у potapenko есть класс Conv
те он нужен.

Самое то........
На все случаи жизни.....

silin 12.06.2005 17:27

Цитата:

Сообщение от Nirth
оффтоп : ты вставил последнее слово=)

выходит, что еще не последнее: твой пример <...DelayEvent.create(this.play,2000)> для
возобновления проигрывания работать не будет, потому как play без объекта приложения
ничего не запустит, то что ты передаешь this.play ничего не меняет - все равно это
только ссылка на функцию и вызовется она через setInterval в пустоте..
чтобы заработало придется передать еще и объект, который эту функцию вызовет:
Код:

function create (ob,fnct,dly){
                var arg=arguments.splice(3);// для этого примера не нужна, но если функция с параметрами, то пригодится
                var id = setInterval (function (a){
                        fnct.apply(ob,a);
                        clearInterval (id);
                }, dly, arg);
}
//////////////////////
this.stop();
create(this,play,1000)


Nirth 12.06.2005 17:31

2 Силин а не легче ле в таком случае будет расширить create в классе Delegate ... или юзать у тебя же Delegate

Updated: хотя нет , только лишний гемор


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

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