レイヤー管理
ちょっとずつ。
class Canvas
{
public:
bool SetPos(int nPosX, int nPosY);
/// キャンパスを前後左右に移動Campus();
~Campus();protected:
vector<Layer> m_vLayer;
vector<Layer> m_vResampled; // 縮小済みのレイヤーint m_nPosX; // スクロール位置
int m_nPosY; //
int m_nSizePer;& // 拡縮率(%)CDIBSurface m_Drawed; // 書き込みはこのサーフェースへ
CUpdatedRect m_Update; // 更新矩形(各レイヤーへの通知と描画)
};#define TILE_SIZE 128 // タイルは正方形で生成される
class Layer
{
public:
bool Create(int nSizeX, int nSizeY);
/// 指定サイズのレイヤーを生成bool SetPos(int nPosX, int nPosY);
/// レイヤーを前後左右に移動bool Input(ISurface* pSrc, int nPosX, int nPosY, int nSizeX, int nSizeY)
/// 対象のサーフェースから入力(ここでタイルを判定して生成)bool Output(ISurface* pDst, int nPosX, int nPosY);
/// 対象のサーフェースへ出力Layer();
~Layer();protected:
smart_array<Tile> m_pTiles; // 領域をタイル化
};class Tile
{
/**
Create()して初めてメモリを消費
*/
public:
bool Create(int nSizeX, int nSizeY);
/// タイルを生成(白でクリア)bool IsCreated() { m_pSurface.get()!=NULL; }
/// 生成済みかどうかbool Input(ISurface* pSrc, int nPosX, int nPosY);
/// 対象のサーフェースから入力bool Output(ISurface* pDst, int nPosX, int nPosY);
/// 対象のサーフェースへ出力bool Release();
/// タイルを未使用状態にTile();
~Tile();protected:
smart_ptr<CDIBSurface*> m_pSurface; // サーフェース
int m_nSizeX;
int m_nSizeY;
};