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

mooncar 28.02.2010 00:01

Я об этом как раз и говорил все время.

Самое главное - вам нужно понять, как должны вести себя Tween при различных обстоятельствах, при различных over / out, дальнейшее дело техники, точнее кода.
Перечитайте также мой последний вопрос из п.5 и постарайтесь на него ответить.
То есть -
"1) Что должно происходить с отложенным Tween2, если мышь была уведена, а потом снова наведена на картинку?"
"2) Что должно происходить с уже осуществляющимся Tween2 обратного хода, если уже в его процессе навели мышь на картинку?"
А также:
"3) Что должно происходить с прямой анимацией Tween, если вступает в силу обратная отложенная?"
От ответа на эти вопросы и зависит алгоритм. Я их не знаю - вам виднее. Но если ответите, то могу попробовать подсказать.

Кстати - не нужно везде пихать onEnterFrame. Сперва разберитесь, как и что у вас должно работать, то есть ТЗ поставьте, хотя бы сами себе и мысленно,ответьте на вопросы выше и сразу станет легче и правильнее писать код.

Ваня Ветров 28.02.2010 01:06

1) Что должно происходить с отложенным Tween2, если мышь была уведена, а потом снова наведена на картинку?
- Ничего. Tween2 (теперь уже условно)) должен быть забыт. При онРоллОвере должен быть начат строго твин цель которого поместить картинку в нужную точку.

2) Что должно происходить с уже осуществляющимся Tween2 обратного хода, если уже в его процессе навели мышь на картинку?"

- Наверное Tween2 должен быть тут же прекращен, аннулирован, аннигилированн). В тоже время с места в котором картинка была застигнута в расплох онРоллОвером должен начаться твин возвращающий картинку на первое место, т.е. на то начальное положение которое она занимала до онРоллАута и задержки.

3) Что должно происходить с прямой анимацией Tween, если вступает в силу обратная отложенная?
- Обратная отложенная в такой момент должна находиться в другой вселенной и ни как не влиять на работу первого твина. Или не существовать совсем.

Смысл скрипта следующий.

Событие А: Происходит твин (А) который помещает маленькую картинку (а) на большую картинку (б).
Событие Б: На картинке (б) происходит событие онРоллАут, включается таймер, по пошествию обределенного колличества времени происходит твин Б - маленькая картинка(а) уезжает с большой картинки (б) Вдруг неожиданно происходит....
Событие С: На картинке (б) происходит событие онРоллОвер и маленькая картинка возвращается в тоже положение которое ей было назначенно в твине (А) Тут же не успев занять положенное ей положение происходит...
Событие D: На картинке (б) опять происходит событие онРоллАут, но уже таймер не включается..., картинка(а) тут же начинает твин (С) цель которого поместить картинку (а) в тоже положение что и твин(Б).

Как все усложнилось из за таймера. Без него все работало как часы). Курсор наводился картинка появлялась, курсор уводился картинка убиралась. Какая то заморочка с clearInterval......хм-хм-хм.

mr_pol 28.02.2010 09:47

Цитата:

тестанул мистера Пола скрипт на низких скоростях твина где то на 19. Да! Присутствует глюк.)
в смысле? я показал пример интервала. а что там у вас с твинами происходит, не знаю, проблема ваша)

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

проблема действительно с твинами).


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

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