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

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

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

Регистрация: Jul 2012
Сообщений: 112
По умолчанию Изменения свойств нажатого объекта

Создаются объекты cell. При клике на один из них хочу, чтобы менялся его цвет. В коде ниже видны мои попытки, но они неудачны. Как сделать?
Код AS3:
public function displayCell(dataFromXML:XML):void
		{
 
 
			for(var i:int = 0; i < 5; i++)
			{		
 
				var sizeCell:uint = 100;
				var cell:Sprite = new Sprite();
				cell.graphics.beginFill(0xCCCCCC, 1.0);
				cell.graphics.lineStyle(1, 0x000000);
				cell.graphics.drawRect(i * sizeCell, 30, sizeCell, sizeCell);
				cell.buttonMode = true;
				addChild(cell);
				cell.addEventListener(MouseEvent.CLICK, cellActions);
			}	
		}	
 
//Метод запускаемый по клику
		public function cellActions(e:MouseEvent):void
		{
//Здесь, по идее, должно происходить изменение цвета
			//e.currentTarget.graphics.beginFill(0xFFFFFF, 1.0);
			e.target.graphics.beginFill(0xFFFFFF, 1.0);;
		}

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Это не изменяет цвет, а задает цвет для будущего рисования.

Добавлено через 7 минут
Даже если Вы не согласны с советами сделать Cell отдельным классом, то хотя бы сделайте вразумительно сами спрайты-клетки. Зачем Вы рисуете в них в разных координатах? Рисуйте в (0, 0), и расставляйте спрайты в нужные координаты прямо в этом же цикле.

Добавлено через 14 минут
Код AS3:
var cellSize:uint = 100;
public function displayCell(dataFromXML:XML):void
		{
 			for(var i:int = 0; i < 5; i++)
			{		
 				var cell:Sprite = new Sprite();
				cell.graphics.beginFill(0xCCCCCC, 1.0);
				cell.graphics.lineStyle(1, 0x000000);
				cell.graphics.drawRect(0, 0, cellSize, cellSize);
				cell.buttonMode = true;
				addChild(cell);
				cell.x = i * cellSize;
				cell.y = 30;
				cell.addEventListener(MouseEvent.CLICK, onCellClick);
			}	
		}	
 
//Метод запускаемый по клику
		public function onCellClick(e:MouseEvent):void
		{
//Здесь, по идее, должно происходить изменение цвета
			var cell:Sprite = e.target as Sprite;
			cell.graphics.clear();
			cell.graphics.beginFill(0xFFFFFF, 1.0);
			cell.graphics.lineStyle(1, 0x000000);
			cell.graphics.drawRect(0, 0, cellSize, cellSize);
		}
__________________
Reality.getBounds(this);


Последний раз редактировалось Wolsh; 06.04.2013 в 15:57.
Старый 06.04.2013, 15:52
olejan1991 вне форума Посмотреть профиль Отправить личное сообщение для olejan1991 Найти все сообщения от olejan1991
  № 3  
Ответить с цитированием
olejan1991

Регистрация: Jul 2012
Сообщений: 112
так у меня cell в отдельном классе и фрагмент кода из него, а координаты у меня на самом деле не такие. Вопрос ведь по цвету, и координаты стоят не те, что в коде. Прикрепил полностью проект. Wolsh, прошу Вас его глянуть и оценить в плане правильности.
Вложения
Тип файла: rar VirtualMap2.rar (42.0 Кб, 43 просмотров)

Старый 06.04.2013, 16:05
Александр Мостовой вне форума Посмотреть профиль Отправить личное сообщение для Александр Мостовой Посетить домашнюю страницу Александр Мостовой Найти все сообщения от Александр Мостовой
  № 4  
Ответить с цитированием
Александр Мостовой
 
Аватар для Александр Мостовой

Регистрация: Sep 2001
Адрес: Харьков
Сообщений: 305
Отправить сообщение для Александр Мостовой с помощью ICQ Отправить сообщение для Александр Мостовой с помощью Skype™
Не знаю стоит ли их перерисовывать - проще применить colorTransform

Код AS3:
		private function mouseEventHandler(event:MouseEvent):void
		{
			var obj:DisplayObject = event.target as DisplayObject;
			setTint(obj, color, percent);
		}
 
		private function setTint(object:DisplayObject, rgb:uint, percent:uint):void
		{
			var t:Transform = new Transform(object);
			var ct:ColorTransform = t.colorTransform;
 
			var ratio : Number = percent / 100;
			ct.redOffset = (rgb >> 16)*ratio;
			ct.greenOffset = ((rgb >> 8) & 0xFF)*ratio;
			ct.blueOffset = (rgb & 0xFF)*ratio;
 
			ct.redMultiplier = ct.greenMultiplier = ct.blueMultiplier = 1 - percent/100;
 
			t.colorTransform = ct;
		}
Правда с точки зрения архитектуры не очень хорошая правктика менять свойства прямов в событии. Лучше устанавливать виртуальное свойство, а уже ячейки из него пусть берут текущий цвет

Добавлено через 6 минут
Для некоторых случаев когда элемент уже раскрашен определенным образом неплохо смотрится наложение поверх плашки в режиме BlendMode.OVERLAY (или другом).
Тогда сохраняются некоторые оттенки основной графики и элемент обретает некоторый общий стиль в определенном тоне, а не происходит полное перекрашивание

Добавлено через 7 минут
А вообще посмотрите на устройство компонента DataGrid в стандартном наборе флеш компонентов или же его же и используйте
__________________
...

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

Регистрация: Jul 2012
Сообщений: 112
Спасибо за все ответы, но не зацикливайтесь на изменении цвета. Я про цвет спросил, чтобы понять как вообще обратиться к объекту на который нажали и совершать с ним какие-то действия.

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

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
Код AS3:
(e.currentTarget as ВашКласс).конкретныйМетод()
__________________
Отряд Котовскага

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Не знаю стоит ли их перерисовывать - проще применить colorTransform
Это шутка? Перерисовать как раз гораздо проще

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
OK, зацикливаться на цвете реально не приходится. В Вашем коде при любом действии все объекты до единого заново пересоздаются. Я уже не говорю про эффективность использования памяти; объясните мне, как Вы собираетесь управлять системой, каждая часть которой удаляется и создается новая при любом действии?
Зачем Вам создавать новый редактор XML при каждом клике по "добавить/отнять колонку/строку"? Зачем удалять всю карту при этом и создавать с нуля новую? У Вас же в классе есть метод, обновляющий текущую карту (собственно о нем и ставился вопрос). И редактор в единственном числе прекрасно справляется. Такое ощущение, что код писали два человека, забыв договориться.
__________________
Reality.getBounds(this);

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

Регистрация: Sep 2001
Адрес: Харьков
Сообщений: 305
Отправить сообщение для Александр Мостовой с помощью ICQ Отправить сообщение для Александр Мостовой с помощью Skype™
Цитата:
Сообщение от caseyryan Посмотреть сообщение
Это шутка? Перерисовать как раз гораздо проще
СТранное у вас понятие о шутках...
Нет смысла это обсуждать в отрыве от конкретной задачи и условий.
Для случая с использованием аппаратной поддержки, например, так перезагрузка данных тормознутее на пару порядков без вариантов.
Ди и без аппаратной поддержки перерисовка занимает все же больше ресурсов чем перекраска.
__________________
...

Старый 06.04.2013, 17:10
olejan1991 вне форума Посмотреть профиль Отправить личное сообщение для olejan1991 Найти все сообщения от olejan1991
  № 10  
Ответить с цитированием
olejan1991

Регистрация: Jul 2012
Сообщений: 112
Цитата:
Сообщение от Wolsh Посмотреть сообщение
В Вашем коде при любом действии все объекты до единого заново пересоздаются. Я уже не говорю про эффективность использования памяти; объясните мне, как Вы собираетесь управлять системой, каждая часть которой удаляется и создается новая при любом действии?
Зачем Вам создавать новый редактор XML при каждом клике по "добавить/отнять колонку/строку"? Зачем удалять всю карту при этом и создавать с нуля новую? У Вас же в классе есть метод, обновляющий текущую карту (собственно о нем и ставился вопрос). И редактор в единственном числе прекрасно справляется. Такое ощущение, что код писали два человека, забыв договориться.
Код AS3:
private var editor:XMLEditor;
 
public function completeLoad(e:Event):void
		{		
			// Присваиваем данные XML переменной
			dataMap = new XML(urlLoader.data);
			// Добавляем тулбар
			toolbar();	
			// Добавляем карту
			cellMap();
 
			editor = new XMLEditor(dataMap); // теперь создаем только один редактор
		}
 
public function buttonActions(e:MouseEvent):void
		{
//удаление всех объектов убираем
			//removeChild(cell);
			//cell = null;
 
			if(e.target.name == "ADD_LINE")
			{
				editor.addLine();
			} 
			else if (e.target.name == "DEL_LINE")
			{
				//removeChild(cell);
				//cell = null;
				editor.delLine();
			}
			else if (e.target.name == "ADD_COLUMN")
			{
				editor.addColumn();
			}
			else if (e.target.name == "DEL_COLUMN")
			{
				//removeChild(cell);
				//cell = null;
				editor.delColumn();
			}
			cell = new Map();
// обновляем отображение
			cell.displayCell(dataMap);
			addChild(cell);			
		}
и теперь я не могу понять как его заставить работать, потому что так ничего не работает

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

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

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


 


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


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