SGと申します。
Cレベル(苦Cさん一通り)
C++レベル(やさしいC++一通り)
標記の件での質問です。
class Map_Manager から派生してclass Unitとclass Mapchipとしました。
UnitのオブジェクトとMapchipのオブジェクトをclass Map_Managerのメンバ変数(座標)でソートして
描画したいのですが手詰まりになっています。
クラスの設計が間違っているような気が徐々にしていますが
ご指導いただけますと幸いです。よろしくお願い致します。
ちなみにまずソートを抜きにして下のようにトライしてみたのですが
AddSprite(&Unit)としても
it->AnimePattern()
でUnit.AnimePattern()ではなくMap_Manager.AnimePattern()
が呼び出されているようです。
int ProcessLoop(){ if(ProcessMessage()!=0)return -1;//プロセス処理がエラーなら-1を返す if(ClearDrawScreen()!=0)return -1;//画面クリア処理がエラーなら-1を返す GetHitKeyStateAll_2();//現在のキー入力処理を行う return 0; } int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){ ChangeWindowMode(TRUE);//ウィンドウモード if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化 Unit Unit; Map_Manager Map_Manager; while(ProcessLoop()==0){//メインループ Map_Manager.AddSprite(&Unit); if(CheckStateKey(KEY_INPUT_ESCAPE)==1)break;//エスケープが入力されたらブレイク ScreenFlip();//裏画面反映 } DxLib_End();//DXライブラリ終了処理 return 0; } class Map_Manager{ public: int Obj_x;//3次元座標。この3つの要素でソートしたい int Obj_y; int Obj_h; int image[24]; Map_Manager(); virtual ~Map_Manager(); std::list<Map_Manager> Object_list; virtual int AnimePattern(); void AddSprite(Map_Manager* _MapManager); }; Map_Manager::Map_Manager(){} Map_Manager::~Map_Manager(){} void Map_Manager::AddSprite(Map_Manager* _Map_Manager){ Object_list.push_back(*_Map_Manager); std::list<Map_Manager>::iterator it = Object_list.begin(); // イテレータ while( it != Object_list.end() ) // listの末尾まで { DrawGraph(it->Obj_x, it->Obj_y, it->image[it->AnimePattern()], TRUE); // 要素を出力 ++it; // イテレータを1つ進める } } int Map_Manager::AnimePattern(){return 0;} class Unit: public Map_Manager{ public: int img; int cnt; public: Unit(); int AnimePattern(); }; Unit::Unit(){ Obj_x=320; Obj_y=240; cnt=0; img=0; LoadDivGraph( "data/grf/***.png" , 24 , 6 , 4 , 64 , 64 , image ) ; } } int Unit::AnimePattern(){ cnt++; img=(cnt%60)/10; return img; } class Mapchip: public Map_Manager{ public: int chip_number; public: int AnimePattern(); }; Mapchip::Mapchip(){ LoadDivGraph( "data/grf/***.png" , 24 , 6 , 4 , 64 , 48 , image ) ; } int Mapchip::AnimePattern(){return 0;}
