Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   работа с цветом \16-ричные цифры (http://www.flasher.ru/forum/showthread.php?t=115290)

gen4 25.08.2008 18:21

работа с цветом \16-ричные цифры
 
Код:

trace((0x7a <<24));
trace((0x8a <<24));
trace((0x9a <<24));

на выходе:
Цитата:

2046820352
-1979711488
-1711276032
или же в 16-ричном виде:
Цитата:

7a000000
-76000000
-66000000

почему так происходит?
как после этого, спрашивается, мне задать цвет в формате 0хAARRGGBB ? исключительно стрингом?

litebox 25.08.2008 18:43

Ну примерно вот так:
Код:

var color:uint = 0;

var r, g, b, a:uint;

a = 128;
r = 128;
g = 128;
b = 128;

a = a << 24;
r = r << 16;
g = g << 8;

color = color | a;
trace(color);
color = color | r;
trace(color);
color = color | g;
trace(color);
color = color | b;
trace(color);

2147483648 - 0x80000000
2155872256 - 0x80800000
2155905024 - 0x80808000
2155905152 - 0x80808080

wvxvw 25.08.2008 18:47

потому что это signed bitwise shift. Это значит, что принимает во внимание знак и работает с int а не uint. Вот ток unsigned left shift не существует, есть только правый...
Я думаю, что в вашей ситуации это поможет:
Код:

trace(uint(0x7a <<24));
trace(uint(0x8a <<24));
trace(uint(0x9a <<24));


gen4 25.08.2008 19:29

Да, дело в типе.
Большое спасибо

Alex Lexcuk 25.08.2008 19:34

>>как после этого, спрашивается, мне задать цвет в формате 0хAARRGGBB ? исключительно стрингом?

Я исключительно стрингом задавал, так легче
Код:

var a = 0x77;
var r = 0x66;
var g = 0x60;
var b = 0x06;

var res_color = int("0x"+f_f(a)+f_f(r)+f_f(g)+f_f(b));

trace("Шеснадцатиричный "+res_color.toString(16));

function f_f(ff_color:int)
{
var res_str = "0", w_str = ff_color.toString(16);
if (w_str.length>1) res_str = w_str; else  res_str = res_str+w_str; return res_str;
}

на выходе имеем шеснадцатиричный цвет
output
Шеснадцатиричный 77666006

gen4 25.08.2008 19:41

Да, дело в типе.
Большое спасибо

gen4 25.08.2008 19:43

Alex Lexcuk: такой способ тормозной, по сравнению, например с
Код:

var col:uint=(newAlpha<<24)+0xFFFFFF

etc 25.08.2008 19:45

Alex Lexcuk, учите побитовые операции.

Код:

var a:uint = 0x77;
var r:uint = 0x66;
var g:uint = 0x60;
var b:uint = 0x06;
var color:uint = ((a & 0xFF) << 24) | ((r & 0xFF) << 16) | ((g & 0xFF) << 8) | (b & 0xFF);
trace(color.toString(16));



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

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