Есть ли c++ эквивалент COLOR.Как как java?

Я пытаюсь установить "цветовую переменную" в простой игре, которую я хочу написать, и просто хочу сделать фон плитки любым цветом, который я установил, поэтому мне было интересно, могу ли я использовать что-то вроде java COLOR.blue в [ CN10]

4 ответа

Вам лучше забыть о названиях цветов и просто использовать шестнадцатеричные значения:

****** blue = 0x0000FF;

Или, если вам нужно использовать альфа-канал:

****** blue = 0x880000FF; // ~50% transparent blue

Гораздо проще обрабатывать цвета таким образом, особенно если вы знакомы с HTML-кодированием.


Это сильно зависит от платформы и структуры, которые вы используете. Например, когда вы используете Open GL, у вас есть 4 способа хранения цветов RGB/RGBA, это:

int rgb[3]; // 0-255
int rgba[4] 
float rgb[3];// 0.0f - 1.0f
float rgba[4];

Таким образом, вам придется создать свой собственный статический класс, который вернет указатели для исправления последовательности float/int. Когда вы создаете текстуру, у вас есть еще больше опций (см. Формат и тип).

Когда вы используете Windows CMD, цвета также будут работать по-разному, и вы могли бы сделать:

#define COLOR_RED 16

Поэтому, чтобы ответить на ваш вопрос: Нет, C++ не предоставляет никакого способа обрабатывать цвета равномерно (потому что многие фреймворки работают с использованием C++, и у каждого есть свои собственные цветовые структуры), но он предлагает вам множество опций, как вы можете легко создавать (и некоторые рамки предоставляют этот параметр, например Qt).


Нет (не в стандартных C++ библиотеках в любом случае), но вы можете написать их самостоятельно.

enum Colour{ 
 RED,
 BLUE,
 GREEN
};
Colour myColour = RED; //Colour::RED is non-compliant with the C++ standard... which led to the discussion below.

Конечно, вы могли бы также усложнить и собрать компараторы для разных вещей, разделить цветные и альфа-каналы и т.д.... Похоже, это звучит весело! Мог бы сделать это сам! :П


Qt имеет класс QColor и предопределенные цвета, такие как Qt :: red.

licensed under cc by-sa 3.0 with attribution.