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

sl0n 27.09.2005 13:59

Снова вопрос про паузу
 
Дорогие друзья, я знаю, мы вас уже задрали с вопросами о том как сделать паузу в скрипте, но скажу как есть - я перерыл кучу инфы, нашел как минимум пять вариантов как сделать паузу, но не один не получилось использовать. По этому спрошу на конкретном примере.

Вот у меня есть такая функция, которая делает "затухание" загруженной картинки и по окончанию процесса, вызывает загрузку следующей:
Код:

fade = function(img, newAlpha : Number, speed : Number) : Void {
        img.currentAlpha = img._alpha;

        img.onEnterFrame = function() : Void {
                       
                if(img.currentAlpha > newAlpha) {
                        img._alpha -= speed;
                }
                else if(img.currentAlpha < newAlpha) {
                        img._alpha += speed;
                }
                if (Math.abs(Math.round(newAlpha-img._alpha)) <= speed) {
                        img._alpha = newAlpha;
                        delete img.onEnterFrame;

                                //  Load next image
                                loadImage();
                }
        };
};

Кто-нибудь, помогите вставить сюда паузу на N секунд, перед началом уменьшения _alpha.

Заранее признателен. Спасибо.

старина смерть 27.09.2005 14:34

Код:

class org.nuran.Timeout
{
        private static var _intervals:Array = new Array ();
        private var id:Number;
       
        public function Timeout ()
        {
                id = _intervals.length;
                _intervals[id] = setInterval (function (i:Number, a:Array)
                {
                        a[0].apply (null, a.splice (2, arguments.length));
                        clearInterval (_intervals[i]);
                }, arguments[1], id, arguments);
        }
       
        public function Clear ():Void
        {
                clearInterval (_intervals[id]);
        }
}

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

Код:

import org.nuran.Timeout;
var new_timeout:Timeout = new Timeout (function (a:String, b:String)
{
        trace (a + b);
}, 1000, "Hallo", ", world!");


Vitamin E 27.09.2005 14:39

Попробуй так:
Код:

fade = function(img, newAlpha : Number, speed : Number, pause : Number) : Void {
        img.currentAlpha = img._alpha;
                startTime=getTimer();
               
                _root.onEnterFrame=function () {
                if ((getTimer()-startTime)>pause) {
                delete _root.onEnterFrame;

        img.onEnterFrame = function() : Void {
                       
                if(img.currentAlpha > newAlpha) {
                        img._alpha -= speed;
                }
                else if(img.currentAlpha < newAlpha) {
                        img._alpha += speed;
                }
                if (Math.abs(Math.round(newAlpha-img._alpha)) <= speed) {
                        img._alpha = newAlpha;
                        delete img.onEnterFrame;

                                //  Load next image
                                loadImage();
                }
        };
};
};
};


sl0n 27.09.2005 14:57

Цитата:

Сообщение от старина смерть
Код:

class org.nuran.Timeout
{
        private static var _intervals:Array = new Array ();
        private var id:Number;
       
        public function Timeout ()
        {
                id = _intervals.length;
                _intervals[id] = setInterval (function (i:Number, a:Array)
                {
                        a[0].apply (null, a.splice (2, arguments.length));
                        clearInterval (_intervals[i]);
                }, arguments[1], id, arguments);
        }
       
        public function Clear ():Void
        {
                clearInterval (_intervals[id]);
        }
}

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

Код:

import org.nuran.Timeout;
var new_timeout:Timeout = new Timeout (function (a:String, b:String)
{
        trace (a + b);
}, 1000, "Hallo", ", world!");


Как я понимаю Class - это должен быть внешний подгружаемы .as файл, так? Что то не совсем получилось это использовать. Я с ActionScript работаю всего 4 дня, простите дилетанта. Если бы вы могли еще немного подсказать, был бы благодарен. Спасибо.

sl0n 27.09.2005 14:59

Цитата:

Сообщение от Vitamin E
Попробуй так:
Код:

fade = function(img, newAlpha : Number, speed : Number, pause : Number) : Void {
        img.currentAlpha = img._alpha;
                startTime=getTimer();
               
                _root.onEnterFrame=function () {
                if ((getTimer()-startTime)>pause) {
                delete _root.onEnterFrame;

        img.onEnterFrame = function() : Void {
                       
                if(img.currentAlpha > newAlpha) {
                        img._alpha -= speed;
                }
                else if(img.currentAlpha < newAlpha) {
                        img._alpha += speed;
                }
                if (Math.abs(Math.round(newAlpha-img._alpha)) <= speed) {
                        img._alpha = newAlpha;
                        delete img.onEnterFrame;

                                //  Load next image
                                loadImage();
                }
        };
};
};
};



Спасибо - это работает!

sl0n 27.09.2005 15:08

Vitamin E: Единственная проблема в том, что на _root.onEnterFrame у меня уже висит функция бегущей строки и как только дела доходит до этой "паузы", то моя функция "умирает" - это можжно как то решить? Спасибо.

sl0n 27.09.2005 16:32

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

старина смерть 27.09.2005 17:42

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

Вот так без ошибок:

Код:

class org.nuran.Timeout
{
        private static var _intervals:Array = new Array ();
        private var id:Number;
       
        public function Timeout ()
        {
                id = _intervals.length;
                _intervals[id] = setInterval (function (i:Number, a:Array)
                {
                        a[0].apply (null, a.splice (2, a.length));
                        clearInterval (_intervals[i]);
                }, arguments[1], id, arguments);
        }
       
        public function Clear ():Void
        {
                clearInterval (_intervals[id]);
        }
}

ну и использование

Код:

import org.nuran.Timeout;
var nt:Timeout = new Timeout (function ()
{
        trace (arguments[0]);
        trace (arguments[1]);
        trace (arguments[2]);
        trace (arguments[3]);
        trace (arguments[4]);
        trace (arguments[5]);
}, 2000, "a", "b", "c", "d", "e", "f");


ktotam 05.06.2006 13:49

Здраствуйте!
Помогите кто чем может:

stop();
root.onEnterFrame=pause; function pause() {
if (getTimer()>tim)return;
pause();
}
attachMovie("c1", "c1", 1);
tim=getTimer()+100;
pause();
attachMovie("c2", "c2", 2);


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


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

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