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

VVWind 13.07.2012 03:14

Изменение альфа канала при наведении\отведении мыши.
 
Привет! Давно занимался флешем, все это знал и делал легко, но теперь сталкиваюсь с такими вещами, которые голову ломают еще как, а вроде бы простые.

Хотел сделать красивую кнопку с кое-какой анимацией. Не получилось. Решил создать сзади кнопки белое свечение, чтобы оно появлялось и исчезало при наведении\отведении курсора.

В чем суть проблемы. Я сделал код, собрав по кускам из туториалов и вики, и на rollout клип shine не исчезает.
При этом, если то же самое сделать но с nextFrame и prevFrame (это если анимация исчезания сделана в клипе а не использован _alpha), то часто все работает (но и тут проблема - если быстро туда сюда по кнопке - происходит затык и обе функции начинают поочередно nextFrame и prevFrame делать и анимация заикается на одном месте)

Код AS1/AS2:

shine._alpha = 0;
function rollout()
{
 
 
        if (shine._alpha>0)
        {
                shine._alpha -= 16;
        }
        else
        {
                clearInterval(myInterval);
 
        }
}
function rollover()
{
 
        if (shine._alpha<100)
        {
                shine._alpha += 16;
        }
        else
        {
                clearInterval(myInterval);
 
        }
}
 
 
 
this.onRollOver = function()
{
 
        myInterval = setInterval(rollover, 20);
 
};
 
this.onRollOut = function()
{
 
        myInterval = setInterval(rollout, 20);
 
 
};

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

Нашел тут кое-что.

http://www.alexchinneck.com/ (если клацнуть на эту картинку)
Тут внизу меню Work. Как оно выезжает, без глюков, как угодно дергай его, наводи на него - так плавно хотелось бы появление исчезание объекта (или вперед-назад по кадрам в анимации).

Sergey_A 13.07.2012 11:17

Посмтрел ваш код. На что у вас this указывает? Вместо this напишите конкретный адрес, например, shine.onRollOver - все должно заработать.

dark256 13.07.2012 11:22

1. Объявите myInterval в основном теле программы. В самом начале, условно говоря.
var myInterval;

2. В теле функций пишите _root.myInterval
При этом обращения гарантированно будут производиться к той самой одной и той же переменной интервала.

3. Нафиг он тут вобще нужен.
Код AS1/AS2:

// OBJ - имя клипа.
// mark - клип внутри клипа, который изображает из себя свечение. Типа подложка с glow.
var alphaSpeed = 1;
 
funtion initButton( OBJ )
{
 
        OBJ.mark._alpha = 0;
 
        OBJ.mark.onRollOver = function(){
                delete this.onEnterFrame
                this.onEnterFrame = function(){
                        this._alpha += alphaSpeed*2// Дабы появлялся быстрее, чем затухает
                        if ( this._alpha >= 100 ){
                                this._alpha = 100;
                                delete this.onEnterFrame
                        }
                }
        }
 
        OBJ.mark.onRollOut = OBJ.mark.onReleaseOutside = function(){
                delete this.onEnterFrame
                this.onEnterFrame = function(){
                        this._alpha -= alphaSpeed;
                        if ( this._alpha <= 0 ){
                                this._alpha = 0;
                                delete this.onEnterFrame
                        }
                }
        }       
 
        OBJ.mark.onRelease = function(){
                trace("button clicked");
        }
}


VVWind 13.07.2012 11:39

Большое спасибо, очень помогло, все работает! :)

VVWind 13.07.2012 16:29

Странно что сообщение не отправилось.
Огромное спасибо вам, dark256!

А скажите еще, если можно, как сделать поочередное появление объектов друг за другом?
Вот у меня есть 2-3 кнопки этих, и функция для появления их. Изначально их _alpha = 0, естественно.
Вот функция появления:
Код AS1/AS2:

function appear(obj:Object)
{
        delete obj.onEnterFrame;
        obj.onEnterFrame = function()
        {
                obj._alpha += 6;
                if (obj._alpha >= 100)
                {
                        obj._alpha = 100;
                        delete obj.onEnterFrame;
 
 
 
                }
        };
}

И я например вызываю

Код AS1/AS2:

appear(button1);

Как мне сделать так, чтобы лишь ПОСЛЕ выполнения appear(button1) началось выполнение к примеру appear(button2)?
Конечно все аппеары придется вручную прописывать, но оно того, думаю стоит.

Hauts 13.07.2012 16:31

Код AS1/AS2:

OBJ.mark.onRollOut = OBJ.mark.onReleaseOutside

лучше, наверное, поменять на

Код AS1/AS2:

OBJ.mark.onRollOut = OBJ.mark.onDragOut


dark256 13.07.2012 16:41

Да! Действительно так гораздо лучше. Спасибо :)

Hauts 13.07.2012 16:50

Это мелочи, на самом деле :)

Если зажали курсор мыши на клипе и уводим его с него, то я думаю, что будет правильнее, если клип начнет исчезать (переходить в неактивное состояние) как только курсор мыши покинул его, а не тогда, когда отпустили мышь. Потому, что (классически) действие на клик (onRelease) по кнопке подразумевает нахождение курсора на клипе, а не в произвольной области, после того, как зажали на курсор и увели, а значит и нет смысла поддерживать состояние нажатия, на момент, когда уводим курсор с клипа.

Ох, криво объясняю, надеюсь понятно будет.

Хотя, с другой стороны, с виндоусе по вашему варианту сделано.

dark256 13.07.2012 16:56

Почитал, провел эксперимент - да. Замечательно. Спасибо :)


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

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