はじめましてmegmilkといいます
VisualC++2008EE と DXライブラリを使いRPGを作っているのですがその中の色の管理について質問です
今まで構造体を使い
ヘッダファイルにて
typedef struct{
int White;
int Black;
}g;
g Color;
と構造体をつくっておいて
ロード関数
void load(void){
Color.White = GetColor(255, 255 , 255);
Color.Black = GetColor(0 , 0 , 0);
}
としてから
DrawFormatString( 0 , 0 , Color.White ...
といった感じで問題なく使用できていたのですが
せっかくC++を使っているのでオブジェクト指向を意識して構造体ではなくクラスを使って色を管理しようと思いました。(色管理用のヘッダファイルさえうつしてしまえば違うプログラムでも同じように色を使用できるようにしたかったため)
そこで
color.h
class color_class{
public:
int White;
int Black;
color_class(){
White = GetColor( 255 , 255 , 255);
Black = GetColor( 0 , 0 , 0);
}
};
#ifdef __COLOR_H__
color_class Color;
#else
extern color_class Color;
#endif
というヘッダファイルを各cppファイルでincludeして
DrawFormatString( 0 , 0 , Color.White ...
と使用してみたところコンパイルは問題なくできるのですが色が黒のままでした。
ためしに
DrawFormatString( 200 , 200 , GetColor( 255 , 255 , 255) , "色%d" , Color.White);
という一文をいれてみたところ
色0
と表示されました。
これはColor.WhiteにGetColorの数値が入っていないということでしょうか?
まだクラスについて勉強しはじめたばかりなのですがcolor_classになにか致命的なミスがあるのでしょうか?
ご教授ねがいます。
色管理クラス
Re:色管理クラス
>これはColor.WhiteにGetColorの数値が入っていないということでしょうか?
>color_classになにか致命的なミスがあるのでしょうか
color_classクラス自体にはさほど問題はありませんが、
多分それをインスタンス化するタイミングに問題があるのではないでしょうか。
DXライブラリの関数は大半が DxLib_Init()を使ってライブラリを
初期化した後にしか使えません。
GetColor()も然り。
従って、今の実装ですと color_classクラスのコンストラクタが呼ばれるより前に
DxLib_Init()を呼ばなければなりません。
グローバル変数での運用を考えるなら、その color_classクラスのコンストラクタの中で
DxLib_Init()してからメンバ変数に値を設定するか、或いは color_classクラスに
メンバ変数の初期化メソッドを用意して DxLib_Init()の後にその初期化メソッドを
使って値を設定しないとダメなのではないかと。
>color_classになにか致命的なミスがあるのでしょうか
color_classクラス自体にはさほど問題はありませんが、
多分それをインスタンス化するタイミングに問題があるのではないでしょうか。
DXライブラリの関数は大半が DxLib_Init()を使ってライブラリを
初期化した後にしか使えません。
GetColor()も然り。
従って、今の実装ですと color_classクラスのコンストラクタが呼ばれるより前に
DxLib_Init()を呼ばなければなりません。
グローバル変数での運用を考えるなら、その color_classクラスのコンストラクタの中で
DxLib_Init()してからメンバ変数に値を設定するか、或いは color_classクラスに
メンバ変数の初期化メソッドを用意して DxLib_Init()の後にその初期化メソッドを
使って値を設定しないとダメなのではないかと。