Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Баночка для смешивания красок. (http://www.flasher.ru/forum/showthread.php?t=151741)

PHILLIPS 04.03.2011 19:26

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

cleptoman 04.03.2011 19:54

видимо, каждый канал обоих цветов складываем и делим на количество цветов

Stargazer 04.03.2011 21:50

Цитата:

Сообщение от cleptoman (Сообщение 978095)
видимо, каждый канал обоих цветов складываем и делим на количество цветов

Скорее, не складываем, а вычитаем, если имеется в виду, что нужно имитировать живые краски.

PHILLIPS 04.03.2011 23:20

Насколько я понимаю таким образом Вы предлагаете складывать?

Код AS1/AS2:

_root.fillColor = 0xFFFF00+0xFF0000;

В коде жёлтый + красный, в этом случае рисует жёлтым, т.е не получается или я не так понял.

Добавлено через 1 минуту
Цитата:

Сообщение от Stargazer (Сообщение 978111)
Скорее, не складываем, а вычитаем, если имеется в виду, что нужно имитировать живые краски.

Вот! А При вычитании: жёлтого - красный рисует зелёным =)
Буду разбираться.

Добавлено через 9 минут
Нашёл интересную статейку: http://stratum.ac.ru/textbooks/kgraf...l/addit30.html
Пишут:
Цвета одной системы являются дополнительными к другой: голубой — к красному, пурпурный — к зеленому, желтый — к синему.

Дополнительный цвет — это разность белого и данного цвета:

голубой - это белый минус красный,
пурпурный — белый минус зеленый,
желтый — белый минус синий.

Хотя красный можно считать дополнительным к голубому, по традиции красный, зеленый и синий считаются основными цветами, а голубой, пурпурный, желтый — их дополнениями. Интересно, что в спектре радуги или призмы пурпурного цвета нет, то есть он порождается зрительной системой человека.

Данный алгоритм работает! Сейчас буду искать подобный алгоритм нахождения для других цветов.

mooncar 04.03.2011 23:30

Вложений: 1
Всё таки цвета RGB поканально складываем и делим на количество.
Вычитание будет для проходящего света, например, при расчете прозрачного светофильтра.
А для смешивания цветов при самосвечении или излучении света в отраженном белом, как в случае с "живой краской":

Код AS1/AS2:

color1 = new Color(mc1);
color1.setRGB(0xFFFF00);
color2 = new Color(mc2);
color2.setRGB(0xFF0000);
color3 = new Color(mc3);
 
//FF = (FF + FF) / 2
//7F = (FF + 00) / 2
//00 = (00 + 00) / 2
color3.setRGB(0xFF7F00);

А еще лучше использовать метод setTransform того же класса Color, что удобнее для вычислений и гибче, поскольку можно также работать с альфой каналов. Тем более использовать в связке с getTransform, чтобы можно было "макать" в уже окрашенный объект (палитру или элемент рисунка), узнавая текущую цветовую трансформацию.
Или даже Transform.colorTransform, хотя я не уверен, с этим методом не работал.

UPD. Поправьте меня, если я не прав, сомнения что-то появились. "Оптику" я хоть и сдал на отлично, но это была "Физика" и оч.давно.

AlexCooper 05.03.2011 03:21

Вложений: 1
Код AS1/AS2:

import flash.display.BitmapData;
 
var colors:Array = new Array(["0xFF0000"],["0x00FF00"],["0x0000FF"],["0xFFFF00"],["0x00FFFF"],["0xFF00FF"],["0xFFFFFF"]);
 
for (item in colors)
{
        var newColorBox:MovieClip = _root.attachMovie("colorbox","color"+item,_root.getNextHighestDepth());
                newColorBox._y = 50;
                newColorBox._x = item*(newColorBox._width + 10) + (Stage.width-(newColorBox._width + 10)*(colors.length-1))/2;
 
                color = new Color(newColorBox);
                color.setRGB(colors[item].toString(16));
 
                newColorBox.onPress = drags;
                newColorBox.onRelease = setfill;
}
 
function drags()
{
        this._alpha = 50;
        this.startDrag();
}
 
function setfill()
{
        var imageBitmap:BitmapData = new BitmapData(Stage.width,Stage.height, true, 0x00000000)
        imageBitmap.draw(_root);
 
        colormix = new Color(banka);
        colormix.setRGB("0x"+imageBitmap.getPixel(banka._x,banka._y).toString(16));
 
        this._alpha = 100;
        this.stopDrag();
}


dark256 05.03.2011 12:50

... а для CMYK? :)))

Stargazer 05.03.2011 13:41

mooncar, поправлю.
Вы сами пишете, что складывание происходит при излучении. А краски - это не звёзды и не лампочки, они сами по себе не излучают. Почему падающий белый, отражается от красной краски красным? Потом что краска поглощает все цвета, кроме красного. Это можно представить как "светофильтр + зеркало".

Проверку теории можно провести даже мысленно. Представьте, что у вас в руках красный, синий и зелёный фломастеры. Нарисуйте ими по очереди квадрат друг поверх друга. По вашей теории получится либо белый, либо 50% серого (я не совсем понял). Но если вы рисовали фломастерами - то помните, что на самом деле получится очень тёмное и очень грязное пятно. А если бы фломастеры были в действительности совсем непрозрачными - то мы бы получили абсолютно чёрный.

AlexCooper 06.03.2011 20:22

dark256 а надо ли?)


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

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