Форум 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=144695)

a7z 18.09.2010 20:06

Изменение цвета спрайта.
 
надо сделать такую штуку.
Есть простенький Shape -квадрат, размером 1x1 пиксель с заданным цветом. Хочу сделать кучу однотипных спрайтов с немного различающейся графикой внутри и с этим шейпом в качестве фона и, что самое важное, поменять потом цвет шейпа(фона) во всех спрайтах за 1 клик. Как лучше реализовать?
До этого делал те же манипуляции, но не надо было менять цвет. У меня был спрайт в библиотеке и всё работало. Но вот теперь добавился цвет и я затупил...:wacko:

КорДум 18.09.2010 20:09

Странная реализация - однопиксельный квадрат оО
transform/Matrix вам в руки.

a7z 18.09.2010 20:24

Цитата:

Сообщение от КорДум (Сообщение 936916)
Странная реализация - однопиксельный квадрат оО
transform/Matrix вам в руки.

ну я упростил:rolleyes: там был не то, чтобы однопиксельный квадрат, был на самом деле аж целый спрайт :D с минимальной графикой, который я потом использовал, где только можно. а сейчас смысл в том, что есть динамически созданные спрайты, которые можно двигать после создания, удалять и т.д. раньше я брал из библиотеки "спрайт-образец" и изменял его, как нужно, а теперь еще и цвет этого образца надо менять..
ну в общем ок, буду копать transform/Matrix, пасиб!

p.s. чета пока не найду связь межу матрицей и задачей =(

Wolsh 18.09.2010 20:44

flash.display.DisplayObject#transform.colorTransform

a7z 18.09.2010 21:09

Цитата:

Сообщение от Wolsh (Сообщение 936927)
flash.display.DisplayObject#transform.colorTransform

вооот. я пробовал colorTransform-работает, но у меня не получилось задействовать его для своих делать, вот что в таком случае делать?
упрощенно, что хочу сделать.
есть код
Код AS3:

var cvet:Shape=new Shape();
function IzmenenieCveta(koordinataX:int,koordinataY:int):void {
        cvet.graphics.beginFill(0x999999);
        cvet.graphics.drawRect(0,0,100,100);
        var s:Sprite=new Sprite();
        s.x=koordinataX;
        s.y=koordinataY;
        s.addChild(cvet);
        this.addChild(s);
}
var cvetColorTransform:ColorTransform = cvet.transform.colorTransform;
cvetColorTransform.color = 0x000000;
cvet.transform.colorTransform = cvetColorTransform; 
IzmenenieCveta(0,0);
IzmenenieCveta(100,100);

Когда я вызываю функцию, то цвет меняется,но не так, как надо работает отображение спрайтов(не в плане неправильно, а в плане, не так,как хотелось бы :))..
Если я делаю так:
Код AS3:

function IzmenenieCveta(koordinataX:int,koordinataY:int):void {
    var cvet:Shape=new Shape();
    cvet.graphics.beginFill(0x999999);
    cvet.graphics.drawRect(0,0,100,100);
    var s:Sprite=new Sprite();
    s.x=koordinataX;
    s.y=koordinataY;
    s.addChild(cvet);
    this.addChild(s);
}
 
var cvetColorTransform:ColorTransform = cvet.transform.colorTransform;
cvetColorTransform.color = 0x000000;
cvet.transform.colorTransform = cvetColorTransform;           
IzmenenieCveta(0,0);
IzmenenieCveta(100,100);

То работает функция, но я не могу "дотянутся" до цвета.
Вот как сделать, чтобы и функция работала и цвет менялся??:umnik2:

КорДум 18.09.2010 22:52

http://help.adobe.com/ru_RU/AS3LCR/F...Transform.html
Товарищ хелп вам поможет, там внизу пример применения, а вы применяете неверно.

a7z 19.09.2010 12:46

Цитата:

Сообщение от КорДум (Сообщение 936944)
http://help.adobe.com/ru_RU/AS3LCR/F...Transform.html
Товарищ хелп вам поможет, там внизу пример применения, а вы применяете неверно.

ок, товарищ
Даже если я не правильно применяю, то дело не в цвете.
Я не знаю, как правильней сделать это изменение для n-ого количества спрайтов, которые являются детьми других спрайтов.

КорДум 19.09.2010 12:58

Цитата:

ок, товарищ
хелп - товарищ (:

Я бы загнал все ссылки на фоны в массив, потом тупо циклом прогонялся и менял. Или можно сделать у класса фона статичный метод, он будет один для всех фонов, один раз применить - вуаля! Хотя, статичный метод не подразумевает использование this... Хм, Тогда наверно первый способ. Скорее всего, есть более рациональное решение.

a7z 19.09.2010 13:06

Цитата:

Сообщение от КорДум (Сообщение 937002)
хелп - товарищ (:

Я бы загнал все ссылки на фоны в массив, потом тупо циклом прогонялся и менял. Или можно сделать у класса фона статичный метод, он будет один для всех фонов, один раз применить - вуаля! Хотя, статичный метод не подразумевает использование this... Хм, Тогда наверно первый способ. Скорее всего, есть более рациональное решение.

ну вот я думал, что может кто-то знает варианты, как это без циклов сделать, но видимо придется с циклами...

Wolsh 19.09.2010 15:50

Можно и без циклов, но проще не будет. Если сделать эти фоновые спрайтики своего класса, определить в нем метод перекраски (проще по-моему перерисовки с новым цветом заливки)) и при создании каждый экземпляр подписывать на событие "перекраситься!" от управляющего класса.


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

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