1

私が作成したゲームのクラスの設計に問題があります。

私のアプリには、次のものがあります。

  • CGame画面の幅、画面の高さなど、ゲーム自体に関するすべての情報を含むクラスです。関数では、インスタンスmain()へのポインターを作成します。CGame
  • CGUIObject位置とメソッドを指定するフィールドを含む クラスでdraw()、画面サイズに応じてオブジェクトを描画する方法を知っている必要があります。
  • CGUIManagerシングルトンであり、のリストを含む クラスCGUIObject。リスト内の各オブジェクトに対して、draw() メソッドを呼び出すだけです。

わかりやすくするために、簡単なコードをいくつか入れます。

class CGame
{  
   int screenWidth;
   int screenHeight;
};

class CGUIObject
{
   CPoint position;
   void draw();     // this one needs to know what is a screen's width and height
};

class CGUIManager   // it's a singleton
{
   vector<CGUIObject*> guiObjects;
   void drawObjects();
};

そしてmain.cpp:

CGame* g;

int main()
{
   g = new CGame();

   while(1)
   {
      CGUIManager::Instance().drawObjects();
   }

   return 0;
}

問題は、それぞれCGUIObjectが によって保持されている画面サイズを知る必要があることですが、すべてのオブジェクトにインスタンスへのCGameポインターを含めるのは非常に愚かだと思います。CGame

誰か、これを達成するための最良のアプローチを教えてください。

4

1 に答える 1

1

で画面解像度が必要な理由はありますCGUIObjectか?

それらはすでに位置を持っているので、それらをローカル スペースに描画する場合は、それらCGUIManagerをレイアウトするために変換を適用できます。この方法で GUI オブジェクト自体からレイアウトを抽象化すると、オブジェクトは自分がどのコンテナー (画面、ウィンドウ、タブなど) に属しているかを知る必要がなくなります。

于 2012-11-21T13:49:54.580 に答える