DXライブラリ用のカラークラス
DXライブラリで、カラーに名前を割り振って使うクラス。
を、作ってみた。
#ifndef COLOR_DEF #define COLOR_DEF #include <DxLib.h> #include <map> #include <string> class Color { private: int color_; public: // 無指定は黒 Color(int color = 0) { color_ = color; } virtual ~Color() {} int setColor(int color) { color_ = color; } int setRGB(int r, int g, int b) { color_ = GetColor(r, g, b); } int getColor() { return color_; } }; class Colors { private: map<string, Color> m; public: Colors() {} virtual ~Colors() { m.clear(); } virtual bool push( // 積み込み(color) string name, // 色の名前 int num ) { map<string, Color>::iterator it = m.find(name); bool bl = FALSE; if (it == m.end()) { // 同じ名前のが見つかったら積み込まない Color color(num); m.insert(map<string, Color>::value_type(name, color)); bl = TRUE; } return bl; } virtual bool push( // 積み込み(RGB) string name, // 色の名前 int r, int g, int b ) { map<string, Color>::iterator it = m.find(name); bool bl = FALSE; if (it == m.end()) { // 同じ名前のが見つかったら積み込まない Color color; color.setRGB(r, g, b); m.insert(map<string, Color>::value_type(name, color)); bl = TRUE; } return bl; } virtual int getColor( // 名前から色を取得 const char * name ) { map<string, Color>::iterator it = m.find(name); int color = 0; if (it != m.end()) { color = it->second.getColor(); } return color; } virtual Color * getPtr( // 名前からカラークラスのポインタを取得 const char * name ) { map<string, Color>::iterator it = m.find(name); Color * ptr = NULL; if (it != m.end()) { ptr = &it->second; } return ptr; } }; #endif
使い方〜。
{ // 前略 Colors colors; // 白色を積み込む colors.push("white", 255, 255, 255); // 赤色を積み込む // このように、GetColorで渡してもいいよ colors.push("red", GetColor(255, 0, 0)); // 中略 DrawString(0, 0, "白だよ", colors.getColor("white")); DrawString(0, 100, "赤かもね", colors.getColor("red")); }
可読性のある名前で指定できるようになったよ、やったね!
積み込みも簡単。
GetColorで毎回指定するのが面倒だから何とかしたいとか、
統一性を持たせた色を使いたいとかいう時に便利……なはず。