Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   изменение цвета клипа (http://www.flasher.ru/forum/showthread.php?t=139943)

catcat 15.05.2010 17:17

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

Код 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;
                }


expl 15.05.2010 19:47

Неужели эта строчка выдает разные цвета, вроде вы нигде трансфомацию элементам палитры не задаете:
Цитата:

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;
                }


catcat 15.05.2010 20:20

Цитата:

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

Цитата:

попробуйте посмотреть цвет, который присваиваете трансформации:
Вот там тоже 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);
А можно ли как-нибудь оптимальнее сделать?

expl 16.05.2010 01:48

Цитата:

А можно ли как-нибудь оптимальнее сделать?
Тут сложность то вобщем только в определении цвета по элементу в обработчике клика

Возможные решения:
1. То что вы сделали - применение трансформации цвета элемента
только тогда вместо
Код AS3:

colorElem.graphics.beginFill(colorArray[y][x]);

можно с тем же успехом написать(все равно трансформацию применяем):
Код AS3:

colorElem.graphics.beginFill(0xffffff);

2. Хеширование
Цитата:

private var _colorByElem:Dictionary = 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, время: 03:58.

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