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

FluFf 27.01.2007 17:02

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

etc 27.01.2007 17:33

http://dev.etcs.ru/blog/as2/ru/etcs/...implegradient/
Судя по вопросу, тебе надо пользовать середину градиента.

FluFf 27.01.2007 18:32

а как разбить цвет, полученный getRGB на составляющие? то есть переменной r1 присвоить красную составляющую первого клипа, r2 - второго и.т.д.
А потом можно будет взять среднее арифметическое...
я попробовал взять среднее арифметическое от всего цвета:
Код:

c1 = new Color(mc1);
c2 = new Color(mc2);
c3 = new Color(mc3);
c1.setRGB(0xFFFFFF);
c2.setRGB(0x000000);
col1 = c1.getRGB();
col2 = c2.getRGB();
col = (col1+col2)/2;
c3.setRGB("0x"+col.toString(16));

только у меня ерунда получается белый клип возвращает значение 16777215, черный 0, и получается голубой... а мне серый надо...

Kikasso 27.01.2007 18:37

Хотя бы так:
Код:

function splitRGB( rgb ){
        var rgb_str = rgb.toString(16);
        var R = Number( "0x" + rgb_str.slice( 0,2) );
        var G = Number( "0x" + rgb_str.slice( 2,4) );
        var B = Number( "0x" + rgb_str.slice( 4,6) );
        return {R:R, G:G, B:B};       
}

собрать обратно:
Код:

function joinRGB(R, G, B){
  return ( R << 16 | G << 8 | B );
}


etc 27.01.2007 21:18

Kikasso, splitRGB в некоторых случаях работать не будет.

Код:

function numberToRGB(color:Number):Object {
                color = isNaN(color) ? 0 : color;
                var r:Number = (color >> 16);
                var g:Number = (color >> 8) & 0xFF;
                var b:Number = color & 0xFF;
                var outObj:Object = {r:r,g:g,b:b};
                return outObj;
        }

Выдрал из класса.

FluFf 27.01.2007 22:06

Большое спасибо... все получилось... только обьясните пожалуйста поподробнее как работают эти строки
Код:

var r:Number = (color >> 16);
var g:Number = (color >> 8) & 0xFF;
var b:Number = color & 0xFF;


Kikasso 28.01.2007 03:00

Цитата:

>> Оператор (побитовый), конвертирует expression1 и expression2 в 32-битное целое число и смещает все биты в expression1 вправо на число разрядов, указанное целым числом, результирующим от преобразования expression2. Биты, смещённые вправо, игнорируются. Чтобы сохранить знак изначального выражения expression, биты слева заполняются нулями, если наиболее значимый бит (самый левый) выражения expression1 будет 0, или заполняются единицами, если наиболее значимый бит будет 1. Смещение значения вправо на одну позицию эквивалентно делению на 2, пренебрегая остатком.
& (bitwise AND)
Оператор (побитовый), конвертирует expression1 и expression2 в 32-битные целые числа, и выполняет операцию "булевого И" над каждым битом аргумента целого числа.. Числа с плавающей запятой преобразуются в целое число, путём отбрасывания десятичной части. В результате мы имеем новое беззнаковое целое число.
Скачай переведенный хелп, тема прилеплена.

__etc, спасибо за поправку, я тоже выдирал, но не из класса и не из той версии, как показало расследование.. на самом деле было так:
Код:

function splitRGB(rgb){
 var rgb_str = rgb.toString(16);
 var R = Number( "0x" + rgb_str.slice( 0,2) ) || 0;
 var G = Number( "0x" + rgb_str.slice( 2,4) ) || 0;
 var B = Number( "0x" + rgb_str.slice( 4,6) ) || 0;
 return { rb:R, gb:G, bb:B, aa:100, ab:0 };
//возвращает объект для setTransform()       
}

Ваш способ лучше, признаю.

before 28.01.2007 04:23

Кикассо, пожалуйста объясни видать особо одаренному, что произойдет на конкретных примерах:
AA0000(красный)
101010100000000000000000
0000AA(синий)
000000000000000001010101

примеры:
101010100000000000000000 >> 8 = ?
101010100000000000000000 << 4 = ?
000000000000000001010101 | 101010100000000000000000 = ?
000000000000000001010101 & 101010100000000000000000 = ?

чего-то я не догоняю.
кстати не нужен мега-конвертер систем счисления, от двоичной до 36-ричной! (012...xyz) во флеше

Kikasso 28.01.2007 04:34

домашнее задание:
101010100000000000000000 >> 8 =
1010101000000000

101010100000000000000000 << 4 =
1010101000000000000000000000


000000000000000001010101 |
101010100000000000000000 =
101010100000000001010101

000000000000000001010101 &
101010100000000000000000 =
000000000000000000000000

и еще момент не забудьте,
Цитата:

Сообщение от help
Чтобы сохранить знак изначального выражения expression, биты слева заполняются нулями, если наиболее значимый бит (самый левый) выражения expression1 будет 0, или заполняются единицами, если наиболее значимый бит будет 1


before 28.01.2007 04:42

понятно, Благодарю!!!


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

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