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;} 