Просмотр полной версии : [Вопрос] Макросы цветов.
Alexey_Nikiforov
18.02.2016, 21:39
Всем доброго вечера суток.
Назрел вопрос.
Как создать универсальные макросы для цветов.
Что бы их можно было использовать везде.
Пример обычного красного цвета.
#define COLOR_RED 0xFF0000AA
Где 0x указывает систему исчисления.
FF0000 - это у нас цвет в HEX
AA - прозрачность цвета от 00 до FF
Это макрос отлично подойдет для отправки цветного текста в чат:
SendClientMessage(playerid, COLOR_RED, "Красный текст");
Хорошо но как быть если нам надо сделать его разноцветным:
SendClientMessage(playerid, COLOR_RED, "Welcome to {00FF00}M{FFFFFF}a{FF0000}r{FFFFFF}c{00FF00}o{FFFFFF}'{FF0000}s {FFFFFF}B{00FF00}i{FFFFFF}s{FF0000}t{FFFFFF}r{00FF00}o{FFFFFF}!");
Это жутко не удобно.
Сделаем макрос:
#define COLOR_RED {FF0000}
Теперь наши макросы будут конфликтовать.
Как же так сделать что бы нам было удобно работать и сообщениях и при создании текст дравов.
TextDrawColor(Textdraw0, COLOR_WHITE); тут еще более менее удобно использовать макросы.
TextDrawBackgroundColor(Textdraw0, COLOR_SILVER); а вот тут где требуется настройка прозрачности уже сложнее.
Желательно бы сделать что бы прибавлять нужную прозрачность в ручную. к примеру.
#define COLOR_RED 0xFF0000
TextDrawBackgroundColor(Textdraw0, COLOR_SILVER+35);
Как так сделать кто подскажет?
TextDrawBackgroundColor(Textdraw0, COLOR_SILVER << 0xFF + 35);
Alexey_Nikiforov
18.02.2016, 21:53
А если надо:
TextDrawBackgroundColor(Textdraw0, COLOR_SILVER+AA);
p.s. Проверил не работает:
TextDrawBackgroundColor(Textdraw0, COLOR_SILVER << 0xFF + 35);
Ой, то есть так:
TextDrawBackgroundColor(Textdraw0, COLOR_SILVER << 2 + 0xAA);
Alexey_Nikiforov
18.02.2016, 23:37
Ой, то есть так:
TextDrawBackgroundColor(Textdraw0, COLOR_SILVER << 2 + 0xAA);
Как это работает хоть бы объяснил бы.
Как это работает хоть бы объяснил бы.
<< - побитовый оператор, ищи уроки по ним.
Alexey_Nikiforov
19.02.2016, 07:58
<< - побитовый оператор, ищи уроки по ним.
Вот что их искать когда можешь сказать они у меня есть в блоге, не какой саморекламы. :smile:
http://ziggi.org/pawn-pobitovye-operatory/
И еще вопрос в примерах не нашел.
Уместно применять сложение при таком действие:
TextDrawBackgroundColor(Textdraw0, COLOR_SILVER << 2 + 0xAA);
Или лучше просто назначить нужное значение:
TextDrawBackgroundColor(Textdraw0, COLOR_SILVER << 2 =0xAA);
В уроке просто не чего не сказано про: умножение, деление, сложение, вычитание битов.
По этому и спрашиваю.
p.s. Это не работает записал вот так:
TextDrawBackgroundColor(Textdraw0, 0x00000035);
TextDrawBackgroundColor(Textdraw1, 0x00000000 << 2 + 0x35);
Тут (0x00000035 != 0x00000000 << 2 + 0x35)
Так что что то ты не правильно опять написал.
<< - побитовый оператор, ищи уроки по ним.
Скинь ссылку на свой блог, не стесняйся. Там помнится мне имеется такое :)))))
Alexey_Nikiforov
19.02.2016, 10:29
Вот что их искать когда можешь сказать они у меня есть в блоге, не какой саморекламы. :smile:
http://ziggi.org/pawn-pobitovye-operatory/
Я давал ссылку постом выше.
Что-то я совсем поплыл...
COLOR_RED << 8 | 0xAA
или так:
(COLOR_RED << 8) + 0xAA
MacMailler
19.02.2016, 12:59
#define COLOR_RED 0xFF0000AA
Где 0x указывает систему исчисления.
FF0000 - это у нас цвет в HEX
AA - прозрачность цвета от 00 до FF
Это макрос отлично подойдет для отправки цветного текста в чат:
SendClientMessage(playerid, COLOR_RED, "Красный текст");
Хорошо но как быть если нам надо сделать его разноцветным:
SendClientMessage(playerid, COLOR_RED, "Welcome to {00FF00}M{FFFFFF}a{FF0000}r{FFFFFF}c{00FF00}o{FFFFFF}'{FF0000}s {FFFFFF}B{00FF00}i{FFFFFF}s{FF0000}t{FFFFFF}r{00FF00}o{FFFFFF}!");
Юзай format.
new temp[24];
format(temp, sizeof(temp), "{%06x}COLOR!", COLOR_RED >>> 8);
SendClientMessage(playerid, 0xFF, temp);
Alexey_Nikiforov
19.02.2016, 13:41
Юзай format.
new temp[24];
format(temp, sizeof(temp), "{%06x}COLOR!", COLOR_RED >>> 8);
SendClientMessage(playerid, 0xFF, temp);
Выглядет так как надеть штаны через голову.
- - - Добавлено - - -
Что-то я совсем поплыл...
COLOR_RED << 8 | 0xAA
или так:
(COLOR_RED << 8) + 0xAA
Не работают эти способы.
Прокрути еще раз задачу в голове.
Надо что бы:
0x000000FF
Превратилось в:
0x00000035
Включай магическую фантазию.:rofl:
з.ы. во на писал.
MacMailler
19.02.2016, 13:54
Выглядет так как надеть штаны через голову.
Тогда делай два варианта макроса.
Надо что бы:
0x000000FF
Превратилось в:
0x00000035
(color & 0xFFFFFF00) | 0x35
Alexey_Nikiforov
19.02.2016, 15:26
Тогда делай два варианта макроса.
(color & 0xFFFFFF00) | 0x35
Еще веселее.
Вы в курсе что такое шестнадцатеричная система.
Если делать столько макросов это выйдет примерно на 40к кода.:lol:
MacMailler
19.02.2016, 15:51
Еще веселее.
Вы в курсе что такое шестнадцатеричная система.
Если делать столько макросов это выйдет примерно на 40к кода.:lol:
Лол, это просто пример. Вот универсальный вариант.
#define setAlpha(%0,%1) ((%0 & 0xFFFFFF00) | %1)
Использование
TextDrawColor(Textdraw0, setAlpha(COLOR_WHITE, 0x35));
Alexey_Nikiforov
19.02.2016, 16:04
Если в базе иметь 150 цветов.
+ создание доп макросов сколько их должно выйти.
Мне надо для всех цветов.
А не для каждого создавать макрос.
Или я что то не могу догнать...
MacMailler
19.02.2016, 19:55
Если в базе иметь 150 цветов.
+ создание доп макросов сколько их должно выйти.
Мне надо для всех цветов.
А не для каждого создавать макрос.
Или я что то не могу догнать...
Создаешь всего одину макрос-функцию и юзаешь там где надо. Макросов цветов может быть сколько угодно.
Alexey_Nikiforov
19.02.2016, 20:05
Огромное спасибо.
А может есть идеи как сделать что бы юзать в тексте?
{EE5555}
MacMailler
19.02.2016, 22:54
Придумал другой вариант.
Определяем цвета таким образом
#define COLOR_RED<%0> %0FF0000
#define COLOR_GREEN<%0> %000FF00
#define COLOR_BLUE<%0> %00000FF
#define COLOR_WHITE<%0> %0FFFFFF
Если нужен цвет с альфа-каналом
// AA - нужный альфа-канал, от 00 до FF
TextDrawColor(TdRed, COLOR_RED<0x>AA);
TextDrawColor(TdGreen, COLOR_GREEN<0x>AA);
TextDrawColor(TdBlue, COLOR_BLUE<0x>AA);
Красим слова в разные цвета
SendClientMessage(playerid, COLOR_WHITE<0x>, "{"#COLOR_RED<>"}RED{"#COLOR_GREEN<>"}GREEN{"#COLOR_BLUE<>"}BLUE");
Alexey_Nikiforov
20.02.2016, 11:06
Придумал другой вариант.
Определяем цвета таким образом
#define COLOR_RED<%0> %0FF0000
#define COLOR_GREEN<%0> %000FF00
#define COLOR_BLUE<%0> %00000FF
#define COLOR_WHITE<%0> %0FFFFFF
Если нужен цвет с альфа-каналом
// AA - нужный альфа-канал, от 00 до FF
TextDrawColor(TdRed, COLOR_RED<0x>AA);
TextDrawColor(TdGreen, COLOR_GREEN<0x>AA);
TextDrawColor(TdBlue, COLOR_BLUE<0x>AA);
Красим слова в разные цвета
SendClientMessage(playerid, COLOR_WHITE<0x>, "{"#COLOR_RED<>"}RED{"#COLOR_GREEN<>"}GREEN{"#COLOR_BLUE<>"}BLUE");
Все круто но все равно сложновато выходит когда цветной текст:
{"#COLOR_RED<>"}
И тут бы от префикса "<0x>" отказаться:
COLOR_WHITE<0x>
Вообще бы цены не было.
MacMailler
20.02.2016, 16:43
Все круто но все равно сложновато выходит когда цветной текст:
{"#COLOR_RED<>"}
И тут бы от префикса "<0x>" отказаться:
COLOR_WHITE<0x>
Вообще бы цены не было.
Проще уже некуда.
Alexey_Nikiforov
28.02.2016, 02:36
Проще уже некуда.
Проверил не работает второй способ.
Powered by vBulletin® Version 4.2.0 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot