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

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

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

Регистрация: Dec 2011
Адрес: Беларусь, г. Минск
Сообщений: 50
Отправить сообщение для RhPlus с помощью ICQ Отправить сообщение для RhPlus с помощью Skype™
По умолчанию ColorMatrixFilter и классы

День добрый
Пытаюсь применить к mc1:
Код AS3:
public class Main extends MovieClip 
	{
		public function Main():void 
		{
			var myFilter:satFilter = new satFilter();
			mc1.filters = [myFilter];
		}
	}
фильтр, описанный классом:
Код AS3:
public class satFilter extends MovieClip
	{
 
		public function satFilter():void //constructor
		{
			var disvolve:Number = 0.5;
			var invert:Number   = (1 - disvolve);
 
			var invRed:Number   = invert * 0.21267;
			var invGreen:Number = invert * 0.71516;
			var invBlue:Number  = invert * 0.07217;
 
			var starkMatrix:Array = new Array();
						starkMatrix = starkMatrix.concat([(invRed+disvolve), invGreen, invBlue, 0, 0,]);
						starkMatrix = starkMatrix.concat([invRed, (invGreen+disvolve), invBlue, 0, 0,]);
						starkMatrix = starkMatrix.concat([invRed, invGreen, (invBlue+disvolve), 0, 0,]);
						starkMatrix = starkMatrix.concat([0, 0, 0, 1, 0]);
 
			var filter:ColorMatrixFilter = new ColorMatrixFilter(starkMatrix);
		}
	}
Получаю следующие ошибки:
1)1067: Неявное приведение значения типа satFilter к несоответствующему типу Class.
2)1188: Wu6Я_Illegal assignment to class satFilter.

Подозреваю что либо класс фильтра возвращает не то что нужно, либо в основном классе я обращаюсь не к тому, к чему надо. Сам код фильтра рабочий, в одном основном классе все работало замечательно. Буду крайне признателен за помощь.

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

Регистрация: Feb 2012
Сообщений: 1,540
Код AS3:
var myFilter:satFilter = new satFilter();
mc1.filters = [myFilter];
Эх....
Что же с вами поделать?
satFilter возвращает самого себя.
А фильтр может быть только GlowFilter,ColorMatrixFilter и т.д.

Попробуй так:
Код AS3:
public class satFilter extends MovieClip
	{
 
		public function satFilter():void //constructor
		{
 
		}
                      public static function getFilter():ColorMatrixFilter{
                                 var disvolve:Number = 0.5;
			var invert:Number   = (1 - disvolve);
 
			var invRed:Number   = invert * 0.21267;
			var invGreen:Number = invert * 0.71516;
			var invBlue:Number  = invert * 0.07217;
 
			var starkMatrix:Array = new Array();
						starkMatrix = starkMatrix.concat([(invRed+disvolve), invGreen, invBlue, 0, 0,]);
						starkMatrix = starkMatrix.concat([invRed, (invGreen+disvolve), invBlue, 0, 0,]);
						starkMatrix = starkMatrix.concat([invRed, invGreen, (invBlue+disvolve), 0, 0,]);
						starkMatrix = starkMatrix.concat([0, 0, 0, 1, 0]);
 
			var filter:ColorMatrixFilter = new ColorMatrixFilter(starkMatrix);
                                 return filter;
                       }
	}
А вызывать так:
Код AS3:
public class Main extends MovieClip 
	{
		public function Main():void 
		{
			var myFilter:satFilter = new satFilter();
			mc1.filters = [myFilter.getFilter()];
		}
	}
Или:
Код AS3:
public class Main extends MovieClip 
	{
		public function Main():void 
		{
			mc1.filters = [satFilter.getFilter()];
		}
	}
Думаю, работать будет.
Отпишись.

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

Регистрация: Dec 2011
Адрес: Беларусь, г. Минск
Сообщений: 50
Отправить сообщение для RhPlus с помощью ICQ Отправить сообщение для RhPlus с помощью Skype™
При первом способе вызова ловлю ошибку:
"1061: Обращение к возможно неопределенному методу getFilter через ссылку статического типа satFilter"
При втором - все работает.

Соответственно, первый вопрос: почему когда я создаю экземпляр класса satFilter под названием myFilter и через него обращаюсь к функции getFilter возникает такая ошибка, а при прямом обращении к классу - нет?

Еще два вопроса:

2)Вы оставили пустым конструктор класса satFilter, тем не менее все работает, однако если проинициализировать в нем же функцию getFilter() (что как я думал раньше обязательно) все работает аналогично, почему тем не менее getFilter() инициализируется даже при пустом конструкторе?

3)Вы добавили атрибут "static" в заголовок функции getFilter(), если его убрать, возникает ошибка 1061: Обращение к возможно неопределенному методу getFilter через ссылку статического типа Class. Как работает функция (про static-переменные понятие я имею) с атрибутом "static"?
Большое спасибо за помощь.

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

Регистрация: Feb 2012
Сообщений: 1,540
Цитата:
При первом способе вызова ловлю ошибку:
"1061: Обращение к возможно неопределенному методу getFilter через ссылку статического типа satFilter"
Если вам нравится первый способ, сделайте так:
Код AS3:
public class satFilter extends MovieClip
	{
 
		public function satFilter():void //constructor
		{
 
		}
                      public function getFilter():ColorMatrixFilter{
                                 var disvolve:Number = 0.5;
			var invert:Number   = (1 - disvolve);
 
			var invRed:Number   = invert * 0.21267;
			var invGreen:Number = invert * 0.71516;
			var invBlue:Number  = invert * 0.07217;
 
			var starkMatrix:Array = new Array();
						starkMatrix = starkMatrix.concat([(invRed+disvolve), invGreen, invBlue, 0, 0,]);
						starkMatrix = starkMatrix.concat([invRed, (invGreen+disvolve), invBlue, 0, 0,]);
						starkMatrix = starkMatrix.concat([invRed, invGreen, (invBlue+disvolve), 0, 0,]);
						starkMatrix = starkMatrix.concat([0, 0, 0, 1, 0]);
 
			var filter:ColorMatrixFilter = new ColorMatrixFilter(starkMatrix);
                                 return filter;
                       }
	}
И вызывать:
Код AS3:
public class Main extends MovieClip 
	{
		public function Main():void 
		{
			var myFilter:satFilter = new satFilter();
			mc1.filters = [myFilter.getFilter()];
		}
}

Цитата:
3)Вы добавили атрибут "static" в заголовок функции getFilter(), если его убрать, возникает ошибка 1061: Обращение к возможно неопределенному методу getFilter через ссылку статического типа Class. Как работает функция (про static-переменные понятие я имею) с атрибутом "static"?
http://www.flasher.ru/forum/showthread.php?t=125858

Цитата:
2)Вы оставили пустым конструктор класса satFilter, тем не менее все работает, однако если проинициализировать в нем же функцию getFilter() (что как я думал раньше обязательно) все работает аналогично, почему тем не менее getFilter() инициализируется даже при пустом конструкторе?
Хм...
Потому что это отдельная функция
Не знаю как точнее объяснить.

Цитата:
Соответственно, первый вопрос: почему когда я создаю экземпляр класса satFilter под названием myFilter и через него обращаюсь к функции getFilter возникает такая ошибка, а при прямом обращении к классу - нет?
Потому что satFilter - статическая функция, и вызывается без создания экземпляра класса.

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

Регистрация: Dec 2011
Адрес: Беларусь, г. Минск
Сообщений: 50
Отправить сообщение для RhPlus с помощью ICQ Отправить сообщение для RhPlus с помощью Skype™
Еще раз спасибо, проблема решена.

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

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

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


 


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


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