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

Prometei1599 13.04.2011 18:06

Задание временных интервалов
 
Добрый день коллеги!
Каким методом или классом можно задавать временной интервал между событиями, например событиями загрузки изображения 1 и изображения 2?
setInterval не предлагать!)
К примеру, загружается первое изображение и плавно отображается на экране, через 3 сек вместо первого так же появляется второе и т.д.
Вопрос покажется нубским, но под конец рабочего дня котелок плохо варит...

Заранее спасибо!

Hauts 13.04.2011 18:24

setTimeout, onEnterFrame

petyar 13.04.2011 18:31

Кажется, вы что-то напутали. Вы вызываете методы. А обработчик события вызывается, когда происходит то, на что он подписан.

Скажем, грузите картинку через MovieClipLoader. Обработчик события onLoadInit вызовется, когда закончится загрузка. Что вам мешает вызывать метод loadClip с заданным интервалом?

1) Можно загрузить все изображения (если их мало и это не критично), потом с интервалом "плавно отображать на экране", да хоть что делайте с ними потом.
2) Загружаем одно изображение, со свистелками-перделками отображаем, потом начинаем грузить 2-е. Отображение начинать, когда сработает обработчик события загрузки.

Вот вам простенький пример:
Код AS1/AS2:

var pics:Array = new Array("1.png", "2.png");
var container:MovieClip = createEmptyMovieClip("container", getNextHighestDepth());
var mcLoader:MovieClipLoader = new MovieClipLoader();
var currentPic:Number = 0;
mcLoader.addListener(this);
mcLoader.loadClip(pics[0], container);
//
function onLoadInit(mc:MovieClip) {
        currentPic++;
        mc._alpha = 0;
        timer = setInterval(displayPic, 50, mc);
}
//
function displayPic(mc:MovieClip) {
        if (mc._alpha < 100) {
                mc._alpha += 5;
        } else if (currentPic < pics.length) {
                setTimeout(function() {mcLoader.loadClip(pics[currentPic], container);}, 3000);
                clearInterval(timer);
        } else {
                clearInterval(timer);
        }
}


Prometei1599 18.04.2011 16:17

Спасибо помогло!)
Только трудность теперь в другом возникла: в повторном воспроизведении флэша.
Loop в настройках публикации почему-то не помогает.

Haiat 18.04.2011 17:02

сделайте программно

Prometei1599 18.04.2011 19:34

Привожу код:
Код AS1/AS2:

var ID1:Number = 0;//для изменения прозрачности изображения
var ID2:Number = 0;//для движения заголовка
var ID3:Number = 0;//для движения подзаголовка
var a:Number = 0.09;//ускорение для заголовков
 
var mcl:MovieClipLoader = new MovieClipLoader();
var listener:Object = new Object();
mcl.addListener(listener);
var xml_obj:XML = new XML();
var imagesCount:Number = 0;
var titlesArray:Array = new Array();
var subTitlesArray:Array = new Array();
_title.forceSmoothing = true;
subtitle.forceSmoothing = true;
mc._alpha = 0;
 
xml_obj.ignoreWhite = true;
xml_obj.load("settings.xml");//точка входа
 
xml_obj.onLoad = function(success:Boolean) {
        if (success) {
                imagesCount = xml_obj.firstChild.childNodes[0].attributes.count;
                var k:Number = 0;
                do {
                        var str_subtitle = xml_obj.firstChild.childNodes[0].childNodes[k].childNodes;
                        var str_title = xml_obj.firstChild.childNodes[0].childNodes[k].attributes.title;
                        if ((str == undefined) && (str_subtitle == undefined)) {
                                break;
                        }
                        titlesArray = titlesArray.concat(str_title);
                        subTitlesArray = subTitlesArray.concat(str_subtitle);
                        k++;
                } while(true);
                loadImages(1);
        }
};
 
loadImages = function(i:Number):Void{
        if(i > imagesCount)
                return;
 
        var src:String = "images/flash"+i+".jpg";
        _title.text = titlesArray[i-1];
        subtitle.text = subTitlesArray[i-1];
        mcl.loadClip(src, mc);
 
        listener.onLoadInit = function(target_mc:MovieClip):Void{
                setTimeout(alphaChange, 0, "appear");
                setTimeout(moveTitle, 50, "up");
                setTimeout(moveSubTitle, 50, "up");
 
                setTimeout(alphaChange, 5000, "disappear");
                setTimeout(moveTitle, 5050, "down");
                setTimeout(moveSubTitle, 5050, "down");
 
                setTimeout(loadImages, 5400, i+1);
        }
}
 
alphaChange = function(to_do:String):Void{
        if(to_do == "appear"){
                ID1 = setInterval(appear, 15);
        }
        if(to_do == "disappear")
        {
                ID1 = setInterval(disappear, 15);
        }
}
 
moveTitle = function(to_do:String):Void{
        if(to_do == "up"){
                ID2 = setInterval(titleUp, 15);
        }
        if(to_do == "down"){
                ID2 = setInterval(titleDown, 15);
        }
}
 
moveSubTitle = function(to_do:String):Void{
        if(to_do == "up"){
                ID3 = setInterval(subtitleUp, 15);
        }
        if(to_do == "down"){
                ID3 = setInterval(subtitleDown, 15);
        }
}
 
appear = function():Void{
        if(mc._alpha < 100){
                mc._alpha += 5;
        }else{
                clearInterval(ID1);
        }
}
 
disappear = function():Void{
        if(mc._alpha > 0){
                mc._alpha -= 5;
        }else{
                clearInterval(ID1);
        }
}
 
titleUp = function():Void{
        if(_title._y > 230)
                _title._y += (230 - _title._y)*a;
        else
                clearInterval(ID2);
}
 
titleDown = function():Void{
        if(_title._y < 300)
                _title._y += 10;
        else
                clearInterval(ID2);
}
 
subtitleUp = function():Void{
        if(subtitle._y > 265)
                subtitle._y += (265 - subtitle._y)*a;
        else
                clearInterval(ID3);
}
 
subtitleDown = function():Void{
        if(subtitle._y < 335)
                subtitle._y += 10;
        else
                clearInterval(ID3);
}

gotoAndStop не помогает...
Может есть другой способ?!

Добавлено через 24 часа 36 минут
Получилось!


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

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