トップページ > 過去ログ > 記事閲覧
グローバル変数の色コード取得
名前:らり 日時: 2009/08/22 12:08

#include <DxLib.h> int Red=GetColor(255,0,0); int WINAPI WinMain(略){  DxLib_Init();  ...  return 0;  DxLib_End(); }; のようにグローバル変数に色コードを入れたいのですが、DxLib_Init()はGetColor()関数の前に呼び出せません。 そこで、 class dxLib{  dxLib(){ DxLib_Init(); Red=GetColor(255,0,0);  }  ~dxLib(){   DxLib_End();  } }; というクラスを作成し、 #include <DxLib.h> dxLib dlib; int Red=GetColor(255,0,0); int WINAPI WinMain(略){  ...  return 0; }; のようにコンストラクタ、ディストラクタによってDxLibを初期化・終了処理を行えないか、と考えたのですが、正常に起動・終了しないなどの危険性がありますでしょうか? もしあれば、グローバル変数が正常に色コードを取得できるような、何かいい方法はありませんでしょうか?

Page: 1 |

Re: グローバル変数の色コード取得 ( No.1 )
名前:K_T 日時:2009/08/22 15:02

c++は初心者以下のレベルなので、間違っているかもしれませんが、 質問のソース構成を見た限りでは、DxLibの初期化自体をクラス化するよりも、 グローバル変数にしたRedに対して、DxLib初期化後に別関数なりでRedを含めた変数の 初期化を行えば良いのではないでしょうか? でなければ、基底クラスにRedを入れて、そのクラスから他を派生させ、DxLib初期化後にインスタンスを作成すれば、 変数Redをグローバル変数的な扱いに出来るのではないでしょうか?
Re: グローバル変数の色コード取得 ( No.2 )
名前:らり 日時:2009/08/22 16:25

K_T様 ご助言ありがとうございます。 ソースを簡略化しすぎて、 そもそも何故グローバ変数として 扱いたいかが伝わりにくくなってしまってますね(汗) Red以外にも様々な色の名前を変数として (namespace内に)宣言してあり、 色パレットとして使っていました。 これまではK_T様のおっしゃるとおり、 DxLib初期化後に改めて取得し利用する、 という形で組んでありました。 ただ、今回どうしても他のグローバル変数の引数として色パレットを利用したくなったため、クラスの形で初期化したくなった次第です。 もう少し詳しく書くと、以下のような形です。 #include <DxLib.h> //色パレットの変数宣言 namespace CLR{ int Red=GetColor(255,0,0); ... } //箱を描画してくれるクラスdxBox宣言 //ここで利用する段階では、Redの中身は不定 dxBox box(x1,y1,x2,y2,CLR::Red); //この箱は、別の場所ですでに利用しているので、 //どうしてもグローバルで宣言したい int WINAPI WinMain(略){  DxLib_Init(); ...  return 0;  DxLib_End(); }; そもそもグローバルで利用しようとしている時点で 間違っているのかもしれませんが、 これまでそれを前提として書いてきたため、 変更が簡単でないので...
Re: グローバル変数の色コード取得 ( No.3 )
名前:K_T 日時:2009/08/22 17:39

単純に、[ RED = 赤 ]・[ BLACK = 黒 ]など、変更が無いものならば、#defineでマクロ化しても良いのでは? ヘッダファイルを作成して、そこにパレット用のマクロを全て定義して、 利用するソースファイルでインクルードすれば、問題なく利用できると思いますが・・・ 仮に ・GV.h #include "DxLib.h" #include "function.h" #define RED GetColor(255, 0, 0 ) #define BLACK GetColor( 0, 0, 0 ) ・function.h extern int DBox( int x1, int y1, int x2, int y2, int col ); ・DBox.cpp #include "GV.h" int DBox( int x1, int y1, int x2, int y2, int col ){ DrawBox( x1, y1, x2, y2, col, TRUE ); return 0; } ・ctest.cpp #include "GV.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){ ChangeWindowMode( TRUE ); if( DxLib_Init() != 0 ) return -1; SetDrawScreen( DX_SCREEN_BACK ) ; // ループ while( ProcessMessage() == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 ) { DBox( 0, 0, 100, 100, RED ); DrawString( 0, 0, "test", BLACK ) ; ScreenFlip(); } return 0; } ※修正追記  ・仮のソースはC言語的にクラスを使わずに記述していますが、   クラスを使用しても基本的に通用すると思います・・・
Re: グローバル変数の色コード取得 ( No.4 )
名前:らり 日時:2009/08/23 22:09

遅くなりました。 やはり、マクロが現実的ですかね。 安全性は大丈夫なのか、という妙な先入観から、 導入は躊躇っていたのですが、 それがもっとも簡単な解決策かもしれませんね。 丁寧にソースまで記述して頂き、ありがとうございました。 今回は、その方向で解決してみようと思います!

Page: 1 |