Форум 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)
-   -   Slideshow with timer (http://www.flasher.ru/forum/showthread.php?t=157473)

intrdr 06.06.2011 12:52

Slideshow with timer
 
Добрый день!

Есть набор картинок. Задача: сделать slideshow. Через определённый промежуток времени картинки сменяют друг друга, появляясь из непрозрачности.

Пытаюсь реализовать это без использования timeline.

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



Код AS1/AS2:

 
c = 4; //количество картинок
count = 0; //счётчик для таймера
A = 1; //переменные для объектов
B = 2;
 
// прячем лишние картинки (все кроме первой)
for (i = 2; i < c; i++){
        curClip = this["obj"+i];
        curClip._alpha = 0;
        trace (curClip);
}
 
 
pause = function () {
        if (count == 200){
                curClip1 = this["obj"+A]; //в этом месте не происходит ассоциация с нужной картинкой
                curClip2 = this["obj"+B]; //ну и здесь, естественно тоже самое...
                count = 0;
                curClip1._alpha = 0;
                curClip1.swapDepths(curClip2);
                trace (curClip1);
                if (A < c){
                        A ++;
                }
                else {
                        A = 1;
                }
                if (B < c){
                        B ++;
                }
                else {
                        B = 1;
                }
 
        }
        count ++;
        curClip1._alpha ++;
 
//clearInterval(pausei);
}
 
pauseSwap = setInterval(pause, 5);

Почему не происходит ассоциация с картинками внутри функции?

Или может есть куда более правильный способ?

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

mooncar 06.06.2011 13:12

Вот здесь вставьте трейс:
Код AS1/AS2:

pause = function () {
      trace(this);

И посмотрите, что он выведет.
Увидите, что this в данном случае не ссылается на нужный объект, в котором расположены картинки.

Замените this на _root, если у вас все ваши ["obj"+A] и ["obj"+B] находятся прямо на нем. Либо замените на тот контейнер, где они находятся.

Либо вот такое решение, более корректное и универсальное:
Код AS1/AS2:

pause = function (cont:Object) {
        if (count == 200){
                curClip1 = cont["obj"+A];
                curClip2 = cont["obj"+B];
....
}
 
pauseSwap = setInterval(pause, 5, this);

То есть ссылку на текущий таймлайн (this), где у вас контейнеры с картинками, передаем аргументом в подинтервальную функцию.

И замените имя функции, pause - служебное слово.

intrdr 06.06.2011 14:19

Огромное спасибо! Именно так как надо.

Но тетерь стало очевидно, что .swapDepths работает не так как ожидалось.

Слегка изменил код, вот что в итоге получилось:

Код AS1/AS2:

c = 3;
count = 0;
A = 1;
B = 0;
 
for (i = 1; i < c; i++){
        curClip = this["obj"+i];
        curClip._alpha = 0;
        //trace (this);
}
 
 
mPause = function (cont:Object) {
        if (count == 200){
                //trace (this);
                curClipA = cont["obj"+A];
                curClipB = cont["obj"+B];
                count = 0;
 
                curClipA.swapDepths(curClipB);
                curClipA._alpha = 0;
 
 
                trace (curClipA);
                trace (curClipB);
                trace ("----------")
                if (A < c-1){
                        A ++;
                }
                else {
                        A = 0;
                }
                if (B < c-1){
                        B ++;
                }
                else {
                        B = 0;
                }
 
        }
        count ++;
        curClipA._alpha ++;
 
//clearInterval(pausei);
}
 
pauseSwap = setInterval(mPause, 5, this);

Но глубина не переходит последовательно от прошлой картинки к следующей... :(

mooncar 06.06.2011 14:47

Глубина - это дискретное состояние. Она принимает конкретное значение, определяющее расположение объекта по виртуальной Z-координате.
Честно говоря, сейчас подробно смотреть, как у вас и что меняется, не могу, вот вам инструмент, им воспользуйтесь для того, чтобы смотреть, где что находится в какой момент:
Код AS1/AS2:

trace(mc.getDepth())

чтобы посмотреть, на какую глубину у вас что встает.

intrdr 06.06.2011 16:23

Спасибо за наводку.
В итоге сделал через
Код AS1/AS2:

curClipA.swapDepths( cont.getNextHighestDepth() );



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

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