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

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

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

Регистрация: Dec 2009
Сообщений: 11
По умолчанию плавность проявления - вопрос

здравствуйте.

Пытаюсь сделать так, чтобы при подносе курсора к кнопке изображение town1 плавно проявлялось, а при убирании курсора резко исчезало.

Изначально код на кнопке написал такой:

Код:
on (rollOver) {
_root.town1._alpha=0
this.onEnterFrame=function(){
_root.town1._alpha++
}
}

on (rollOut) {
setProperty("town1", _alpha, "0");
}
Но получалось следующее: картинка проявлялась при подносе мыши, а при убирании курсора исчезала и проявлялясь снова и далее так и оставалась проявившейся.

Добавил в код условие:

Код:
on (rollOver) {
var alphacount=0;
_root.town1._alpha=alphacount;
this.onEnterFrame=function(){
if (alphacount < 100) {
_root.town1._alpha=alphacount;
alphacount++
}
}
}

on (rollOut) {
setProperty("town1", _alpha, "0");
}
Но происходит следующее: Картинка плавно проявляется, но при убирании мышки моргает, но остаётся _alpha=100.

Я также пробовал вынести фунцию отдельно:

В Action фрейма писал:

Код:
function myAlpha () {
setProperty("town1", _alpha, i);
}
setInterval(myAlpha,50000000); // пробовал и 5000 и 500000

а на кнопке такой код:

Код:
on (rollOver) {
for (var i = 0; i < 100; i++) { 
myAlpha();
}
}
Но в этом случае проявление происходило неплавно, а резко.

Пожалуйста, не пинайте сильно - я начинающий.

Старый 12.12.2009, 20:08
zurkis вне форума Посмотреть профиль Отправить личное сообщение для zurkis Найти все сообщения от zurkis
  № 2  
Ответить с цитированием
zurkis
 
Аватар для zurkis

Регистрация: Nov 2008
Адрес: Атланта
Сообщений: 1,271
посмотри класс Tween, это как раз то что тебе нужно
__________________
Пока я жив, Вы горем обеспечены

Старый 12.12.2009, 20:13
newiluha вне форума Посмотреть профиль Отправить личное сообщение для newiluha Найти все сообщения от newiluha
  № 3  
Ответить с цитированием
newiluha

Регистрация: Dec 2009
Сообщений: 11
Пожалуйста, поподробнее.

И я не понимаю какое отношение класс Tween имеет отношение к данному коду?

Я не хочу делать никакие Tweenы. Я хочу изименить просто код так, чтобы плавно прибавлялся _alpha.

Если бы это был бы JS то я бы просто сделал бы цикл в которм добавлял бы значение по 5ть и всё, а в AS я так понимаю цикл for исполняется моментально и таймаут к нему применить нельзя.

Старый 12.12.2009, 20:14
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 4  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Код AS1/AS2:
town1._alpha = 0;
 
town1.onRollOver = function  () {
	this.onEnterFrame = alphaRise;
}
 
town1.onRollOut = function  () {
	this._alpha = 0;
	delete this.onEnterFrame ;
}
 
function alphaRise () {
	if (this._alpha < 100) {
		this._alpha +=5;
	}
	else {
		delete this.onEnterFrame ;
	}
}
Но да, с Tween будет лучше:
- будет плавнее расти альфа
- код будет компактнее:

Код AS1/AS2:
import mx.transitions.Tween ;
town1.onRollOver = function  () {
	myTween = new Tween(this, '_alpha', mx.transitions.easing.None.easeNone, 0, 100, 2, true);
};
 
town1.onRollOut = function  () {
	this._alpha = 0;
	myTween.stop();
};


Последний раз редактировалось mooncar; 12.12.2009 в 20:34.
Старый 12.12.2009, 20:16
newiluha вне форума Посмотреть профиль Отправить личное сообщение для newiluha Найти все сообщения от newiluha
  № 5  
Ответить с цитированием
newiluha

Регистрация: Dec 2009
Сообщений: 11
Всё, решение найдено. Добрые люди уже помогли. Спасибо.

Код:
on (rollOver) {
_root.town1._alpha=0
this.onEnterFrame=function(){
_root.town1._alpha+=2
}
}

on (rollOut) {
delete this.onEnterFrame;
_root.town1._alpha=0
}
Добавлено через 1 минуту
mooncar Спасибо огромное! ))

Старый 12.12.2009, 20:26
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 6  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Пожалуйста.
Но добрые люди учат плохому - не пишите код на кнопках или мувиках!
И кроме того в их коде нет остановки возрастания альфы, ее значение так и продолжает возрастать после 100, хотя это и не видно. Это неряшливость.
Для вас это может сейчас и не иметь значение, но бывают случаи, когда при вычислениях используется альфа больше 100, и кроме того висит лишний процесс.
Так трудно научится правильному коду.
И класс Tween - это очень мощный инструмент, он может иметь отношение к любой анимации, если нет желание организовывать изменения свойств руками.


Последний раз редактировалось mooncar; 12.12.2009 в 20:31.
Старый 12.12.2009, 20:52
newiluha вне форума Посмотреть профиль Отправить личное сообщение для newiluha Найти все сообщения от newiluha
  № 7  
Ответить с цитированием
newiluha

Регистрация: Dec 2009
Сообщений: 11
А можно уточнить - что делает эта строка:

mport mx.transitions.Tween ;

И кстати, куда эту строку ставить?

Я так понимаю, что если у меня несколько кнопок и несколько изображений, которые
по нажатию этих кнопок должны проявляться, то код можно вынести в функцию? А с
каждой кнопки идет просто вызов функции с событием:

function ShowTownTitles(townnumber) {
myTween = new Tween(townnumber, '_alpha', mx.transitions.easing.None.easeNone, 0, 100, 2, true);
}

А код на кнопке будет такой:

on (rollOver) { ShowTownTitles(1); }

Или я что-то не понимаю?

Добавлено через 4 минуты
Уж простите меня за вопросы - я, как любитель JavaScript пытаюсь подогнать AS под под то, что я люблю.

Добавлено через 17 минут
ОООООООО Я всё понял!!!!!!!!!!!!!

Круто!!!!

В Action фрейм я написал следующий код:

import mx.transitions.Tween ;

Код:
but1.onRollOver = function  () {
	myTween = new Tween(town1, '_alpha', mx.transitions.easing.None.easeNone, 0, 100, 2, true);
};

but1.onRollOut = function  () {
	town1._alpha = 0;
	myTween.stop();	
};
Остаётся только его размножить для всех кнопок и рисунков. А кнопкам и рисункам задать id )))


Спасибо!


Последний раз редактировалось newiluha; 12.12.2009 в 20:55.
Старый 12.12.2009, 21:13
zurkis вне форума Посмотреть профиль Отправить личное сообщение для zurkis Найти все сообщения от zurkis
  № 8  
Ответить с цитированием
zurkis
 
Аватар для zurkis

Регистрация: Nov 2008
Адрес: Атланта
Сообщений: 1,271
newiluha чтоб не задавать куда и что писать, советую во флеше нажать F1 и ввести в поиске Tween class и почитайте для чего он используеться и как использовать, ведь для этого и сделали хелп
__________________
Пока я жив, Вы горем обеспечены

Старый 12.12.2009, 21:19
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 9  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Код AS1/AS2:
import mx.transitions.Tween; //иморт класса Tween, строка должна стоять до первого использования
var riseSpeed:Number = 2; // количество секунд для возрастания альфы
var tweenContainer:Object = new Object (); //хранилище для объектов - Tween'ов
 
function upAlpha () { //функция возрастания альфы
	//this - это и есть мувик, для которого вызывается функция
	tweenContainer[this] = new Tween(this, '_alpha', mx.transitions.easing.None.easeNone, 0, 100, riseSpeed, true);
        //tweenContainer  - это как бы массив, где индексом служат объектные ссылки на мувики, для которых вызывается функция
}
 
function downAlpha () { //функция возрастания альфы
        tweenContainer[this].stop(); //если все еще продолжается возрастание альфы, то его останавливаем
	this._alpha = 0;
}
 
function  setAlphaManage (mc:MovieClip) {
	mc.onRollOver = upAlpha;
	mc.onRollOut = downAlpha;
}
 
//используем:
setAlphaManage (town1);
setAlphaManage (town2);
// и т.д.
Не пишите код на кнопках и мувиках:
Цитата:
on (rollOver) { ShowTownTitles(1); }
И когда код Action Script на форуме вставляете, юзайте тег AS


Последний раз редактировалось mooncar; 12.12.2009 в 21:47.
Старый 12.12.2009, 21:37
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 10  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Вот пример управления режимом видимости множества объектов.

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

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

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


 


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


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