色管理クラス

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
megmilk

色管理クラス

#1

投稿記事 by megmilk » 17年前

はじめまして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になにか致命的なミスがあるのでしょうか?
ご教授ねがいます。

Justy

Re:色管理クラス

#2

投稿記事 by Justy » 17年前

>これはColor.WhiteにGetColorの数値が入っていないということでしょうか?
>color_classになにか致命的なミスがあるのでしょうか

 color_classクラス自体にはさほど問題はありませんが、
多分それをインスタンス化するタイミングに問題があるのではないでしょうか。

 DXライブラリの関数は大半が DxLib_Init()を使ってライブラリを
初期化した後にしか使えません。
 GetColor()も然り。

 従って、今の実装ですと color_classクラスのコンストラクタが呼ばれるより前に
DxLib_Init()を呼ばなければなりません。


 グローバル変数での運用を考えるなら、その color_classクラスのコンストラクタの中で
DxLib_Init()してからメンバ変数に値を設定するか、或いは color_classクラスに
メンバ変数の初期化メソッドを用意して DxLib_Init()の後にその初期化メソッドを
使って値を設定しないとダメなのではないかと。

megmilk

Re:色管理クラス

#3

投稿記事 by megmilk » 17年前

color_classクラスに
メンバ変数の初期化メソッドを用意

void Init(void);

を作って違う場所で初期化したところうまいこと行きました。
ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る