Форум 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)
-   -   get Timer или SetInterval?) (http://www.flasher.ru/forum/showthread.php?t=136846)

Ваня Ветров 27.02.2010 00:01

get Timer или SetInterval?)
 
Всем Привет!)
Этот кусок кода работает хорошо...

Курсор наводится на image_mc, image2_mc твинется...).
Код:

image_mc.onRollOver = function()
{var img_Tween:Tween = new Tween(image2_mc, "_y", Elastic.easeOut,  image2_mc._y,60, 1.7, true);};

Курсор уходит с картинки image_mc, image2_mc твинется...).
Код:

image_mc.onRollOut = function()
{var img_Tween2:Tween = new Tween(image2_mc, "_y", Elastic.easeOut,  image2_mc._y,-60, 1.7, true);};

Как сделать так что бы твин2 выполнился по прошествии, ну скажем 3-7 секунд с момента ухода курсора т.е. при наступлении image_mc.onRollOut ? А потом при image_mc.onRollOver т.е. при наведении курсора на image_mc выполнился бы первый твин(без задержек как и был, моментально))? И так далее, хххе, до бесконечности))))))):rolleyes::rolleyes::rolleyes:

mooncar 27.02.2010 00:29

Непонятно изъясняетесь.
Например,
Цитата:

3-7 секунд с момента ухода курсора т.е. при наступлении image_mc.onRollOut
- это разные события.

PS. Может быть вам нужно использовать что-то вроде Bounce.easeOut или другие разновидности движений?

Ваня Ветров 27.02.2010 10:33

происходит image_mc.onRollOut (убирается курсор с image_mc), проходит 5 секунд и происходит твин. Все. Вот такая простая схема.

mr_pol 27.02.2010 10:57

Код AS1/AS2:

func = function () {
        var img_Tween2:Tween = new Tween(image2_mc, "_y", Elastic.easeOut, image2_mc._y, -60, 1.7, true);
        clearInterval(interval);
};
image_mc.onRollOver = function() {
        clearInterval(interval);
        var img_Tween:Tween = new Tween(image2_mc, "_y", Elastic.easeOut, image2_mc._y, 60, 1.7, true);
};
image_mc.onRollOut = function() {
        interval = setInterval(func, 5000);
};


mooncar 27.02.2010 10:58

Для осуществления задержки используйте функцию setTimeout
Код AS1/AS2:

to = setTimeout (someFunction, delay);
 
function someFunction() {
 //действия
}

Есть нюансы:

А если курсор уходит с image_mc в промежутке, пока идет анимация?
Или например при этом потом сразу же опять происходит RollOver?

Запоминается ли эта последовательность и ее отработка должна произойти своим чередом, или более позднее событие over или out должно перекрывать предыдущее запланированное или уже начатое и его Tween?

Эти вещи тоже бы предусмотреть нужно.

Ваня Ветров 27.02.2010 11:38

Мистер Пол! Все работает! Вауу! Как и надо! Вауу, Вауу, Вауу! О, е-е-е-е-е! Ё-ё-ё-ё!
Мункар, setTimeout что то вообще ни как.... Даже в хелпе флэша такого нет). Хотя у Гурского об этом есть не много "Аналогичной функции setInterval() ActionScript является функция setTimeout() Javascript."

mooncar 27.02.2010 11:39

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

Код AS1/AS2:

import mx.transitions.Tween;
var tweenHolder:Object = new Object();
image_mc.onRollOut = imgOut;
image_mc.onRollOver = imgOver;
 
function imgOver () {
        image_mc.enabled = false ;
        tweenHolder['off'].stop();
        tweenHolder['on'] = new Tween(image2_mc, "_y", mx.transitions.Elastic.easeOut, image2_mc._y, 60, 1.7, true);       
        tweenHolder['on'].onMotionFinished = imgEnable;       
}
 
function delayedTween () {
        image_mc.enabled = false ;
        tweenHolder['on'].stop();
        tweenHolder['off'] = new Tween(image2_mc, "_y", mx.transitions.Elastic.easeOut, image2_mc._y, -60, 1.7, true);
        tweenHolder['off'].onMotionFinished = imgEnable;               
}
 
function imgOut () {
        to = setTimeout(delayedTween, 3000);       
}
 
function imgEnable () {
        image_mc.enabled = true ;
}

Тут учитывается, если что, остановка предыдущего движения и деактивация кнопки до выполнения предыдущего задания.

PS. А вообще-то setTimeout очень даже "как" - ведь он проще, чем setInterval, так как не нужно стирать интервал, после первого выполнения он очистится автоматически. То есть на одну строку кода меньше.
Хелп юзайте! :)

Ваня Ветров 27.02.2010 12:10

смотрел я хелп и 8 макромедии и 2004 мх, нету там ни чего про setTimeout, но ваш пример попробую.

mooncar 27.02.2010 12:16

Ага. Да бог с ним, с setTimeout.
Ваня Ветров, вы представляете, что должно происходить, если курсор уводится / наводится уже в процессе происходящей анимации? Не то, чтобы сильно меня это заботит, просто любых грабель можно избежать, если заранее об этом подумать.
Если бы не отсрочка, все было бы не так важно.
Ведь в примере mr_pol (да и у вас изначально) движения, по крайне мере, img_Tween, будут наслаиваться, если многократно уводить - наводить мышь, и результирующее движение будет не совсем то, что вы ждете.

Ваня Ветров 27.02.2010 23:44

mooncar тестанул мистера Пола скрипт на низких скоростях твина где то на 19. Да! Присутствует глюк.) Суть его такова. Происходит РоллАут, включается задержка, начинает выполняться твин.... картинка медленно ползет куда ей нужно. Не долго думая инициирую РоллОвер. Включается твин РоллОвера, картинка занимает финальное положение, небольшая задержка, а потом она стремительно уноситься на ту позицию в которой она находилась до РоллОвера и продолжает довершать твин вызванный РоллАутом. Агась). Но на высоких скоростях, пока глюков не было замечено). Как эту болезнь побороть. Ваш скрипт не много мне не подходит. Не должно быть выключенного Энейбледа. У меня есть мыслишка, что можно попытаться как то задействовать для первоначальной цели онЭнтерФрейм? Жду выших Ответов!)


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

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