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

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

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

Регистрация: Jun 2007
Сообщений: 30
Question Проблема с кодом

Господа, я к вам опять в недобрый час. Проблема в следующем. На главной временной линейке есть две кнопки. В первый кадр вбивается код:
Код:
light2._alpha = 0;//Начальное состояние первой кнопки
part._alpha = 55;
light2.onRollOver = function() {
	light2._alpha = 0;
	part._alpha = 55;
	onEnterFrame = function () {
		light2._alpha += 8;
		part._alpha += 4;
	};
};
delete onEnterFrame;
light2.onRollOut = function() {
	light2._alpha = 100;
	part._alpha = 100;
	onEnterFrame = function () {
		light2._alpha -= 8;
		part._alpha -= 4;
		if (part._alpha<=55) {
			part._alpha = 55;
		}
	};
};
delete onEnterFrame;
(Т.е. при наведении на кнопку она плавно становится непрозрачной, при отведении прозрачной.)
Продолжаем вбивать код для второй кнопки. Теперь все выглядит так:
Код:
light2._alpha = 0;//Начальное состояние первой кнопки
light3._alpha=0;// Начальное состояние второй кнопки
part._alpha = 55;
light2.onRollOver = function() {
	light2._alpha = 0;
	part._alpha = 55;
	onEnterFrame = function () {
		light2._alpha += 8;
		part._alpha += 4;
	};
};
delete onEnterFrame;
light2.onRollOut = function() {
	light2._alpha = 100;
	part._alpha = 100;
	onEnterFrame = function () {
		light2._alpha -= 8;
		part._alpha -= 4;
		if (part._alpha<=55) {
			part._alpha = 55;
		}
	};
};
delete onEnterFrame;
light3._alpha = 0;
light3.onRollOver = function() {
	light3._alpha = 0;	
	onEnterFrame = function () {
		light3._alpha += 8;		
	};
};
delete onEnterFrame;
light3.onRollOut = function() {
	light3._alpha = 100;	
	onEnterFrame = function () {
		light3._alpha -= 8;		
	};
};
delete onEnterFrame;
Все работает…но! Как только курсор с одной кнопки попадает на другую (ведем курсор по кнопкам), предыдущая застывает (код стопорится). Т.е. при плавном переходе от первой кнопки ко второй первая должна гаснуть, а вторая зажигаться. На деле получается, что первая кнопка застывает, как только достигли второй. Думал проблема в delete onEnterFrame…нифига, так же все. Если кто знает проблему - взываю к помощи.

Старый 14.07.2007, 23:56
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 2  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
проблема в том, что в onRollOver /onRollOut ты назначаешь/меняешь onEnterFrame одного и того же объекта (их родителя), стало быть определенный по onRollOut одной кнопки, тут же переопределяется в onRollOver другой..
поставь везде this.onEnterFrame=.. (тогда это будут onEnterFrame самих кнопок и переопределяться друг другом уже не будут)
зы: delete onEnterFrame (да еще в таком количестве) ничего не выполняют в твоем коде..

Старый 15.07.2007, 00:14
D12 вне форума Посмотреть профиль Отправить личное сообщение для D12 Найти все сообщения от D12
  № 3  
Ответить с цитированием
D12
меценат
 
Аватар для D12

блогер
Регистрация: Jan 2004
Адрес: D
Сообщений: 1,592
Записей в блоге: 2
Код:
var Go:Number = 3;//скорость альфы
var Next:Number = 2;//количество кнопак на которые распространяется код
for (var i:Number = 0; i<Next+1; i++) {
	this["mc"+i]._alpha = 0;
	this["mc"+i].onRollOver = function() {
		this.onEnterFrame = function() {
			if (this.hitTest(_root._xmouse, _root._ymouse)) {
				if (this._alpha<=100) {
					this._alpha += Go;
				}
			}
			if (!this.hitTest(_root._xmouse, _root._ymouse)) {
				if (this._alpha>=0) {
					this._alpha -= Go;
				}
				if (this._alpha<=0) {
					delete this.onEnterFrame;
				}
			}
		};
	};
}
Держи зайцепку =) должно работать

кнопки называть вот так mc1 , mc2 и т.д.
__________________
Безвыходных положений небывает © Барон Мюнхаузен=)Исходники


Последний раз редактировалось D12; 15.07.2007 в 00:20.
Старый 15.07.2007, 01:14
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 4  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
в "onEnterFrame" какого мувика ты записываешь функцию?
в _root -- поэтому она у тебя перезаписывается если ты наводишь на дугую кнопку.
пиши в функциях, который записываешь в onRollOut и onRollOver -- this.onEnterFrame. Если cсылаешься не из функции пиши lightX.onEnterFrame

Старый 15.07.2007, 03:49
Rasamaha вне форума Посмотреть профиль Отправить личное сообщение для Rasamaha Найти все сообщения от Rasamaha
  № 5  
Ответить с цитированием
Rasamaha
 
Аватар для Rasamaha

Регистрация: Jun 2007
Сообщений: 30
Ok, спасиб всем. Сейчас исправимся. Вот что еще хотел спросить…смотрю я на свой код и думаю, *Может его оптимизировать как-нибудь? Что то уж больно громоздкий для такого примитивного действа. * Как считаете?

Вот код на одну (первую) кнопку – она вообще работать отказалась.
Код:
light2._alpha = 0;
light3._alpha = 0;
part._alpha = 55;
light2.onRollOver = function() {
	light2._alpha = 0;
	part._alpha = 55;
	this.onEnterFrame = function() {
		light2._alpha += 8;
		part._alpha += 4;
	};
};
light2.onRollOut = function() {
	light2._alpha = 100;
	part._alpha = 100;
	this.onEnterFrame = function() {
		light2._alpha -= 8;
		part._alpha -= 4;
		if (part._alpha<=55) {
			part._alpha = 55;
		}
	};
};


Последний раз редактировалось iNils; 15.07.2007 в 04:42.
Старый 15.07.2007, 04:43
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 6  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Для оформления своего кода, надо использовать теги [code][/code].
Название темы не раскрывает сути вопроса. У вас уже второй плюс. Читайте правила.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 15.07.2007, 05:25
Kikasso вне форума Посмотреть профиль Отправить личное сообщение для Kikasso Найти все сообщения от Kikasso
  № 7  
Ответить с цитированием
Kikasso
 
Аватар для Kikasso

Регистрация: Oct 2006
Адрес: spb.ru
Сообщений: 3,221
Код:
stop();
var fadeSpeed = 5;
var limAlpha = 55;
function fadeIn(){
 this._alpha += fadeSpeed;
 if(this._alpha >= 100 ) delete this.onEnterFrame;
}
function fadeOut(){
 this._alpha -= fadeSpeed;
 if(this._alpha <= limAlpha ){
  this._alpha = limAlpha; 
  delete this.onEnterFrame;
 }
}
function doRollOver(){
 this.onEnterFrame = fadeIn;
}
function doRollOut(){
 this.onEnterFrame = fadeOut;
}
/// код для кнопки ///
mc._alpha = limAlpha;
mc.onRollOver = doRollOver;
mc.onRollOut = mc.onDragOut = doRollOut;
upd: конечно код не "на" кнопку, а "для" кнопки.


Последний раз редактировалось Kikasso; 25.09.2007 в 17:13.
Старый 15.07.2007, 12:17
Rasamaha вне форума Посмотреть профиль Отправить личное сообщение для Rasamaha Найти все сообщения от Rasamaha
  № 8  
Ответить с цитированием
Rasamaha
 
Аватар для Rasamaha

Регистрация: Jun 2007
Сообщений: 30
Цитата:
Сообщение от Kikasso
Код:
/// код на кнопку ///
mc._alpha = limAlpha;
mc.onRollOver = doRollOver;
mc.onRollOut = mc.onDragOut = doRollOut;
Вешаю код на кнопку - выдает ошибку(

Старый 15.07.2007, 12:32
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 9  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Надо «вешать» в кадр, а не на кнопку.

Старый 15.07.2007, 15:20
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 10  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
Цитата:
Может его оптимизировать как-нибудь? Что то уж больно громоздкий для такого примитивного действа
Kikasso вполне его оптимизировал для твоего подхода (через onEnterFrame)
есть и другие варианты:
Код:
import mx.transitions.*
var fadeDuration=20;
var defaultAlpha=55;
function fadeIn(){
	new Tween(this,"_alpha",null,this._alpha,100,fadeDuration);
}
function fadeOut(){
	new Tween(this,"_alpha",null,this._alpha,defaultAlpha,fadeDuration);
}
//mc1, mc2 - кнопки 
mc1._alpha=mc2._alpha=defaultAlpha;
mc1.onRollOver = mc2.onRollOver =fadeIn;
mc1.onRollOut = mc2.onRollOut = fadeOut;
еще удобнее положить это добро в класс
Код:
import mx.transitions.*
class But extends MovieClip {
	static public var defaultAlpha=10;
	static public var duration=20;
	public function But(){
		onDragOut = onRollOut;
		_alpha=defaultAlpha;
	}
	function onRollOver(){
		new Tween(this,"_alpha",null,_alpha,100,duration);
	}
	function onRollOut(){
		new Tween(this,"_alpha",null,_alpha,defaultAlpha,duration);
	}
}
и назначить его (в библиотке linkage.. символа) этим кнопкам


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

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

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


 


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


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