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

sogologo 30.10.2009 23:20

нельзя нажать пока не прошел интервал... как?
 
всем привет, сначала хочу сказать всем спасибо, а так же спасибо всему форуме, столько узнал при написание флэш сайта, и значительно поднял свой уровень!!!

а теперь к делу...

вот в чем задача:
есть 4 кнопки, при нажатии на кнопки, происходит разная программная анимация.
Вопрос:
как сделать, что бы при нажатии на одну из кнопок, нельзя было нажать на другие в течении 2 секунд (допустим).

вот для примерчка код:
Код AS1/AS2:

mybtn1.onRelease = function () {
var tween_menu:Tween = new Tween(mybtn1, "_x", Elastic.easeOut, mybtn1._x, 100, 1, true);
}
 
mybtn2.onRelease = function () {
var tween_menu:Tween = new Tween(mybtn2, "_x", Elastic.easeOut, mybtn2._x, 200, 1, true);
}
 
mybtn3.onRelease = function () {
var tween_menu:Tween = new Tween(mybtn3, "_x", Elastic.easeOut, mybtn3._x, 300, 1, true);
}
 
mybtn4.onRelease = function () {
var tween_menu:Tween = new Tween(mybtn4, "_x", Elastic.easeOut, mybtn4._x, 400, 1, true);
}

за ранее спасибо за ответ.

PS: сорри если есть ошибки, устал оч.

mooncar 30.10.2009 23:40

Можно так:
Код AS1/AS2:

var allowTween:Boolean = true ;
var timeOut:Number = 2000;
 
function allowTweenToTrue () {
        allowTween = true ;
}
 
mybtn1.onRelease = function () {
        if (allowTween ) {
                var tween_menu:Tween = new Tween(mybtn1, "_x", Elastic.easeOut, mybtn1._x, 100, 1, true);
                allowTween = false ;
                var id:Number = setTimeout(allowTweenToTrue, timeOut);               
        }
}
 
mybtn2.onRelease = function () {
        if (allowTween ) {
                var tween_menu:Tween = new Tween(mybtn2, "_x", Elastic.easeOut, mybtn2._x, 200, 1, true);
                allowTween = false ;
                var id:Number = setTimeout(allowTweenToTrue, timeOut);               
        }
}
 
mybtn3.onRelease = function () {
        if (allowTween ) {
                var tween_menu:Tween = new Tween(mybtn3, "_x", Elastic.easeOut, mybtn3._x, 300, 1, true);
                allowTween = false ;
                var id:Number = setTimeout(allowTweenToTrue, timeOut);               
        }
}
 
mybtn4.onRelease = function () {
        if (allowTween ) {       
                var tween_menu:Tween = new Tween(mybtn4, "_x", Elastic.easeOut, mybtn4._x, 400, 1, true);
                allowTween = false ;
                var id:Number = setTimeout(allowTweenToTrue, timeOut);               
        }
}

Но лучше сделать одну общую функцию для компактности и переносимости.

Добавлено через 8 минут
Код AS1/AS2:

import mx.transitions.Tween;
 
var allowTween:Boolean = true ;
var timeOut:Number = 2000;
 
function allowTweenToTrue () {
        allowTween = true ;
}
 
function mybtnRelease () {
        if (allowTween) {       
                var tween_menu:Tween = new Tween(this, '_x', Elastic.easeOut, this._x, 100 * this.num, 1, true);
                allowTween = false ;
                var id:Number = setTimeout(allowTweenToTrue, timeOut); //по истечении врмени timeOut триггер allowTween снова будет true и кнопки станут активными
        }
}
 
for (i = 1; i <=4; i++) {
        _root['mybtn' + i].num = i;
        _root['mybtn' + i].onRelease = mybtnRelease;
}

Добавлено через 19 минут
Или вот это вариант, отключает реагирование кнопки на все события.
Может быть полезно, если нужно вообще деактивировать повдение, в том числе и rollOver, например, если на это событие есть что-то типа анимации кнопок...
Код AS1/AS2:

import mx.transitions.Tween;
var timeOut:Number = 2000;
 
function mybtnRelease () {
        var tween_menu:Tween = new Tween(this, '_x', Elastic.easeOut, this._x, 100 * this.num, 1, true);
        manageBtns(false);
        var id:Number = setTimeout(manageBtns, timeOut, true);               
}
 
function manageBtns (enab:Boolean) {
        for (i = 1; i <=4; i++) {
                _root['mybtn' + i].enabled = enab;
        }       
}
 
for (i = 1; i <=4; i++) {
        _root['mybtn' + i].num = i;
        _root['mybtn' + i].onRelease = mybtnRelease;
}

Естественно, _root нужно заменить, если кнопки и код принадлежат другому таймлайну.

sogologo 31.10.2009 00:07

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

отлично оптимизировали мой код во втором своём варианте, но к сожалению он не подойдет к моему случаю, там куда всё сложней.. (а может и я не понимаю просто )))

зато в третьем своём примере вы указали что можно совсем отключить функции на кнопках на время... как оформить ваш третий прием, для моего кода? который я указал в первом посте.

спасибо

mooncar 31.10.2009 00:09

Третий код будет работать без изменений и с вашими исходными объектами, если кнопки лежат на _root и код записан в кадре там же. Проверено.
Если кнопки где-то еще, перепишите пути. Например, если код и кнопки внутри мувика, то самый простой вариант записать код в кадре внутри мувика с кнопками и заменить _root на this.
В общем, все рабочее, только подпилите под свои условия, если что.

Вот эта запись вам понятна?
Код AS1/AS2:

for (i = 1; i <=4; i++) {
        _root['mybtn' + i].num = i;
        _root['mybtn' + i].onRelease = mybtnRelease;
}


sogologo 31.10.2009 00:14

стараюсь понять, но что то голова уже не тянет )))

можно маленький примерчик :))

на моём исходном коде

mooncar 31.10.2009 00:15

Второй раз повторяю - все три варианта - это подпиленный ВАШ код.

Добавлено через 1 минуту
Вот тут:
Код AS1/AS2:

var tween_menu:Tween = new Tween(this, '_x', Elastic.easeOut, this._x, 100 * this.num, 1, true);

this = mybtn1, mybtn2,...
this.num = 1,2,3

sogologo 31.10.2009 00:20

да всё ваши записи понятные но условия

Код AS1/AS2:

this.num = 1,2,3

не будут подходить, так как у меня вот так tween прописан

Код AS1/AS2:

var tween_menu:Tween = new Tween(menu_mc, "_y", Elastic.easeOut, menu_mc._y, Stage.height/2-146, 1, true);

и там много таких вещей :) из-за этого я в тупике, как использовать полное отключения из вашего примера

...вот если туплю сразу извиняюсь :)

mooncar 31.10.2009 00:28

Ну есть наверное какая-то зависимость между номером кнопки и Stage.height/2-146 ?
Вот ее и нужно использовать.

sogologo 31.10.2009 00:31

нет абсолютно не какой зависимости :(

там такая бешеная анимация.... ужос просто... иногда даже двойная

всё таки покажите пожалуйста :) именно на первом примере моего кода, как использовать ваше полное отключение??

mooncar 31.10.2009 00:37

Хорошо, сейчас.


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

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