Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 13.07.2012, 03:14
VVWind вне форума Посмотреть профиль Отправить личное сообщение для VVWind Найти все сообщения от VVWind
  № 1  
Ответить с цитированием
VVWind

Регистрация: Jul 2012
Сообщений: 3
По умолчанию Изменение альфа канала при наведении\отведении мыши.

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

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

В чем суть проблемы. Я сделал код, собрав по кускам из туториалов и вики, и на 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. Как оно выезжает, без глюков, как угодно дергай его, наводи на него - так плавно хотелось бы появление исчезание объекта (или вперед-назад по кадрам в анимации).


Последний раз редактировалось VVWind; 13.07.2012 в 03:55.
Старый 13.07.2012, 11:17
Sergey_A вне форума Посмотреть профиль Отправить личное сообщение для Sergey_A Найти все сообщения от Sergey_A
  № 2  
Ответить с цитированием
Sergey_A

Регистрация: Jun 2010
Сообщений: 128
Посмтрел ваш код. На что у вас this указывает? Вместо this напишите конкретный адрес, например, shine.onRollOver - все должно заработать.

Старый 13.07.2012, 11:22
dark256 вне форума Посмотреть профиль Отправить личное сообщение для dark256 Посетить домашнюю страницу dark256 Найти все сообщения от dark256
  № 3  
Ответить с цитированием
dark256
 
Аватар для dark256

блогер
Регистрация: Apr 2008
Адрес: SPb
Сообщений: 3,718
Записей в блоге: 5
Отправить сообщение для dark256 с помощью ICQ Отправить сообщение для dark256 с помощью Skype™
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");
	}
}
__________________
FLASHER.MAP SOUNDSTAGE / CS3 / AS2

Старый 13.07.2012, 11:39
VVWind вне форума Посмотреть профиль Отправить личное сообщение для VVWind Найти все сообщения от VVWind
  № 4  
Ответить с цитированием
VVWind

Регистрация: Jul 2012
Сообщений: 3
Большое спасибо, очень помогло, все работает!

Старый 13.07.2012, 16:29
VVWind вне форума Посмотреть профиль Отправить личное сообщение для VVWind Найти все сообщения от VVWind
  № 5  
Ответить с цитированием
VVWind

Регистрация: Jul 2012
Сообщений: 3
Странно что сообщение не отправилось.
Огромное спасибо вам, 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)?
Конечно все аппеары придется вручную прописывать, но оно того, думаю стоит.

Старый 13.07.2012, 16:31
Hauts вне форума Посмотреть профиль Отправить личное сообщение для Hauts Посетить домашнюю страницу Hauts Найти все сообщения от Hauts
  № 6  
Ответить с цитированием
Hauts
 
Аватар для Hauts

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,113
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
Код AS1/AS2:
OBJ.mark.onRollOut = OBJ.mark.onReleaseOutside
лучше, наверное, поменять на

Код AS1/AS2:
OBJ.mark.onRollOut = OBJ.mark.onDragOut
__________________
hauts.ru

Старый 13.07.2012, 16:41
dark256 вне форума Посмотреть профиль Отправить личное сообщение для dark256 Посетить домашнюю страницу dark256 Найти все сообщения от dark256
  № 7  
Ответить с цитированием
dark256
 
Аватар для dark256

блогер
Регистрация: Apr 2008
Адрес: SPb
Сообщений: 3,718
Записей в блоге: 5
Отправить сообщение для dark256 с помощью ICQ Отправить сообщение для dark256 с помощью Skype™
Да! Действительно так гораздо лучше. Спасибо
__________________
FLASHER.MAP SOUNDSTAGE / CS3 / AS2

Старый 13.07.2012, 16:50
Hauts вне форума Посмотреть профиль Отправить личное сообщение для Hauts Посетить домашнюю страницу Hauts Найти все сообщения от Hauts
  № 8  
Ответить с цитированием
Hauts
 
Аватар для Hauts

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,113
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
Это мелочи, на самом деле

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

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

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

Старый 13.07.2012, 16:56
dark256 вне форума Посмотреть профиль Отправить личное сообщение для dark256 Посетить домашнюю страницу dark256 Найти все сообщения от dark256
  № 9  
Ответить с цитированием
dark256
 
Аватар для dark256

блогер
Регистрация: Apr 2008
Адрес: SPb
Сообщений: 3,718
Записей в блоге: 5
Отправить сообщение для dark256 с помощью ICQ Отправить сообщение для dark256 с помощью Skype™
Почитал, провел эксперимент - да. Замечательно. Спасибо
__________________
FLASHER.MAP SOUNDSTAGE / CS3 / AS2

Создать новую тему Ответ Часовой пояс GMT +4, время: 01:46.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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