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

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

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

Регистрация: Mar 2010
Сообщений: 93
По умолчанию изменение цвета клипа

Пытаюсь изменить цвет клипа, цвет-то меняется, но всегда на черный, хотя элементы палитры окрашены в нужные цвета. Не понимаю, в чем тут дело:

Код AS3:
public function ColorPalette(c:MovieClip) {
 
			coloredObj = c;
 
			for (var y:uint = 0; y < paletteHeight; ++y)
				for (var x:uint = 0; x < paletteWidth; ++x)
				{
					var colorElem:Sprite = new Sprite();
					colorElem.graphics.beginFill(colorArray[y][x]);
					colorElem.graphics.drawRect(x * horizontalSpacing, y * verticalSpacing,
												colorElemWidth, colorElemHeight);
					colorElem.graphics.endFill();
					colorElem.buttonMode = true;
					colorElem.addEventListener(MouseEvent.CLICK, changeColor);
					trace(colorElem.transform.colorTransform.color);
					addChild(colorElem);
				}
			colorArray = null;
		}
 
		private function changeColor(event:MouseEvent)
		{
			var trans:ColorTransform = transform.colorTransform;
			trans.color = event.target.transform.colorTransform.color;
			coloredObj.transform.colorTransform = trans;
		}


Последний раз редактировалось catcat; 15.05.2010 в 17:20.
Старый 15.05.2010, 19:47
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 2  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Неужели эта строчка выдает разные цвета, вроде вы нигде трансфомацию элементам палитры не задаете:
Цитата:
trace(colorElem.transform.colorTransform.color);
Более ничего не заметил, попробуйте посмотреть цвет, который присваиваете трансформации:
Код AS3:
                private function changeColor(event:MouseEvent)
		{
			var trans:ColorTransform = transform.colorTransform;
			trans.color = event.target.transform.colorTransform.color;
                        trace(trans.color);//
			coloredObj.transform.colorTransform = trans;
		}

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

Регистрация: Mar 2010
Сообщений: 93
Цитата:
Неужели эта строчка выдает разные цвета, вроде вы нигде трансфомацию элементам палитры не задаете
Нет, тут выводится ноль, хотя спрайты окрашиваются в нужный цвет :/

Цитата:
попробуйте посмотреть цвет, который присваиваете трансформации:
Вот там тоже 0 почему-то.

Добавлено через 1 час 19 минут
теперь все работает.
Цитата:
var colorElem:Sprite = new Sprite();
colorElem.graphics.beginFill(colorArray[y][x]);
colorElem.graphics.drawRect(x * HORIZONTAL_SPACING+OFFSET_X, y * VERTICAL_SPACING+OFFSET_Y,
COLOR_ELEMENT_WIDTH, COLOR_ELEMENT_HEIGHT);
colorElem.graphics.endFill();

var trans:ColorTransform = transform.colorTransform;
trans.color = colorArray[y][x];
colorElem.transform.colorTransform = trans;

colorElem.buttonMode = true;
colorElem.addEventListener(MouseEvent.CLICK, changeColor);
addChild(colorElem);
А можно ли как-нибудь оптимальнее сделать?

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

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Цитата:
А можно ли как-нибудь оптимальнее сделать?
Тут сложность то вобщем только в определении цвета по элементу в обработчике клика

Возможные решения:
1. То что вы сделали - применение трансформации цвета элемента
только тогда вместо
Код AS3:
colorElem.graphics.beginFill(colorArray[y][x]);
можно с тем же успехом написать(все равно трансформацию применяем):
Код AS3:
colorElem.graphics.beginFill(0xffffff);
2. Хеширование
Цитата:
private var _colorByElemictionary = new Dictionary();
...
_colorByElem[colorElem] = colorArray[x][y];
addChild(colorElem);
...
trans.color = _colorByElem[event.target];
3. Расширение класса Sprite классом ColorElement, чтобы добавить ему поле "color" и заодно перенести туда часть функционала из ColorPallete:
Код AS3:
public class ColorElement extends Sprite
{
    private var _color:uint;
    public function get color():uint
    {
         return _color;
    }
 
    public function ColorElement(color:uint)
    {
         _color = color;
         // ресуем прямоугльник цвета color
     }
}
Ну и использовать это поле в обработчике клика

4. Самый экономный по ресурсам способ - загнать таблицу цветов в BitmapData,
не разбивать ее на отельные части, а тупо по клику мышкой брать
bitmapData.getPixel(mouseX, mouseY);

5. И еще можно много всего придумать.

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

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

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


 


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


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