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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 05.07.2007, 17:38
Torero вне форума Посмотреть профиль Отправить личное сообщение для Torero Найти все сообщения от Torero
  № 1  
Ответить с цитированием
Torero
[+1.4 18.06.07]
 
Аватар для Torero

Регистрация: May 2007
Адрес: Moscow
Сообщений: 263
По умолчанию Маска не перетаскивается вместе с клипом в котором она расположена.

Добрый день.
Что хотел: Динамически создать перетаскиваемую размытую маску с расположенным поверх нее мувиком(текст+изображение).
Что делал:
1.Создал в отдельном мувике Bitmap сцены, применил к нему blur.
2.Создал мувик(holder_mc) в который поместил: а)маску(m_mc) вышеупомянутого клипа; б)мувик в котором буду выводить текст поверх маски.
В чем проблема:
Неадекватно срабатывает код
Код:
	m_mc.onPress=function(){_parent.startDrag();}
	m_mc.onRelease=function(){_parent.stopDrag();}
причем:
1.проблемы начинаются именно после того, как указываю m_mc в качестве маски.
2.судя по поведению курсора, (useHandCursor), маскирующий мувик передвигается вместе с родительским, но на экране, при этом, его положение не меняется.((

Кто-нибудь сталкивался с подобным? Это баг или моя ошибка? Что делать?


-------------------------------
Если поможет, вот реальный код:
Код:
import mx.core.UIObject;
import flash.filters.*;
import flash.display.*;
class classes.test extends UIObject{

		private var a:MovieClip;//размытый фон
		private var b:MovieClip;//затемнение реального фона
		private var c:MovieClip;//маска для размытого фона
		private var d:MovieClip;//холдер маски
		private var e:MovieClip;//нечто, лежащее поверх маски(текст, поля ввода и т.п.)
		private var fonBmp:BitmapData;

	public function test(){
		fonBmp=new BitmapData(Stage.width,Stage.height);
			fonBmp.draw(_root);
		a=this.createEmptyMovieClip("a",1);
			a.attachBitmap(fonBmp,a.getNextHighestDepth());
			a.cacheAsBitmap = true;
			a.filters=[new BlurFilter(5,5)];
		b=this.createEmptyMovieClip("b",this.getNextHighestDepth());
			b.beginFill(0xDDDFCD,60);
			b.lineStyle(0,0xff0000);
			b.lineTo(Stage.width,0);
			b.lineTo(Stage.width,Stage.height);
			b.lineTo(0,Stage.height);
			b.endFill();
		d=this.createEmptyMovieClip("d",this.getNextHighestDepth());		
		e=d.createEmptyMovieClip("e",d.getNextHighestDepth());
			e.lineStyle(20,0xff0000);
			e.lineTo(50,100);
		c=d.createEmptyMovieClip("c",d.getNextHighestDepth());
			c.lineStyle(0,0xff0000);
			c.beginFill(0x006655);
			c.lineTo(200,0);
			c.lineTo(200,100);
			c.lineTo(0,100);
			c.endFill();
			c._parent._x=d._y=150;
		a.setMask(c);
			b.swapDepths(a);
			b.cacheAsBitmap = true;
//		trace("Depth.   A: "+a.getDepth()+"   B:"+b.getDepth()+"  C:"+c.getDepth()+"  E:"+e.getDepth());
			c.onPress=function(){_parent.startDrag();}
			c.onRelease=function(){_parent.stopDrag();}
	}
}


Последний раз редактировалось Torero; 05.07.2007 в 18:57.
Старый 06.07.2007, 12:07
Kikasso вне форума Посмотреть профиль Отправить личное сообщение для Kikasso Найти все сообщения от Kikasso
  № 2  
Ответить с цитированием
Kikasso
 
Аватар для Kikasso

Регистрация: Oct 2006
Адрес: spb.ru
Сообщений: 3,221
так попробуйте:
Код:
c.onPress=function(){d.startDrag();}
c.onRelease=function(){stopDrag();}

Старый 06.07.2007, 12:16
Torero вне форума Посмотреть профиль Отправить личное сообщение для Torero Найти все сообщения от Torero
  № 3  
Ответить с цитированием
Torero
[+1.4 18.06.07]
 
Аватар для Torero

Регистрация: May 2007
Адрес: Moscow
Сообщений: 263
не работает. Да и как он в runtime идентифицирует "d"?)

Перепробовал все что только мог. Такое ощущение, что надо либо drag вручную прописывать через onMouseDown, либо setMask, обновляя клип с небольшим интервалом. И то и другое сделать можно, но неправильный какой-то подход получается...

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

Регистрация: Oct 2006
Адрес: spb.ru
Сообщений: 3,221
а так?
Код:
c.onPress=function(){this._parent.startDrag();}
c.onRelease=function(){stopDrag();}

Старый 06.07.2007, 12:27
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 5  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

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

Старый 06.07.2007, 12:28
Torero вне форума Посмотреть профиль Отправить личное сообщение для Torero Найти все сообщения от Torero
  № 6  
Ответить с цитированием
Torero
[+1.4 18.06.07]
 
Аватар для Torero

Регистрация: May 2007
Адрес: Moscow
Сообщений: 263
Тоже не работает. Происходит именно то, о чем писал:
Цитата:
Сообщение от Torero
2.судя по поведению курсора, (useHandCursor), маскирующий мувик передвигается вместе с родительским, но на экране, при этом, его положение не меняется.((
2iNils: ок. сделаю читабельным. а чем так плохо создание ф-ий внутри методов.(уже не 1й раз про это слышу)


Последний раз редактировалось Torero; 06.07.2007 в 12:31.
Старый 06.07.2007, 12:41
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 7  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Цитата:
Сообщение от Torero
а чем так плохо создание ф-ий внутри методов.(уже не 1й раз про это слышу)
Вот скажите, зачем вы используете классы?
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 06.07.2007, 13:57
Torero вне форума Посмотреть профиль Отправить личное сообщение для Torero Найти все сообщения от Torero
  № 8  
Ответить с цитированием
Torero
[+1.4 18.06.07]
 
Аватар для Torero

Регистрация: May 2007
Адрес: Moscow
Сообщений: 263
2iNils:Для описания компонентов - решил выучить язык, создавая простенькие компоненты. Когда основные моменты прояснятся, буду учиться межклассовому взаимодействию - как передавать данные, как вызывать, как наследовать и т.п. + довольно удобно с точки зрения дальнейшего использования...

Переписал код. Проблема возникает в тот момент, когда для "замаскированного" клипа устанавливаю "cacheAsBitmap=true".

Код:
	private function rect(mc:MovieClip,rx:Number,ry:Number,rcol:Number):Void { //Рисуем прямоугольник
		mc.beginFill(rcol,60);
		mc.lineTo(rx,0);
		mc.lineTo(rx,ry);
		mc.lineTo(0,ry);
		mc.endFill();
	}
	
	private function drawmask(){
			var maskee_mc:MovieClip;//"замаскированный" клип
			var mask_mc:MovieClip;//маска
			var holder_mc:MovieClip;//холдер маски
			var top_mc:MovieClip;//нечто, лежащее поверх маски(текст, поля ввода и т.п.)
		maskee_mc=this.createEmptyMovieClip("maskee", this.getNextHighestDepth());
		rect(maskee_mc,400,400,0xFF0000);
		holder_mc=this.createEmptyMovieClip("holder", this.getNextHighestDepth());
		mask_mc=holder_mc.createEmptyMovieClip("mask", holder_mc.getNextHighestDepth());
		rect(mask_mc,200,100,0);
		top_mc=holder_mc.createEmptyMovieClip("top", holder_mc.getNextHighestDepth());
		rect(top_mc,20,20,0x0000FF);
		maskee_mc.cacheAsBitmap=true;//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
		maskee_mc.setMask(mask_mc);
		mask_mc.onPress=function(){_parent.startDrag();}
		mask_mc.onRelease=function(){_parent.stopDrag();}
	}
---------------------------------

Смог решить проблему, но способ извращенный - при "cacheAsBitmap=true" flash не прорисовывает маску при смещении родительского клипа, но прорисовывает, когда мы обращаемся непосредственно к ней. Наверное, в данном случае, все-таки лучше самому создать аналог setMask, пусть даже это встанет в ресурсы.. Если, вдруг, кому понадобится, выкладываю рабочий вариант:
Код:
	mask_mc.onPress=function(){
		eval(_parent).startDrag(); 		
		rInterval=setInterval(Delegate.create(this ,function(){this._visible=true; }),1);
	}
	mask_mc.onRelease=function(){this.stopDrag(); clearInterval(rInterval);}


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

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

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


 


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


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