象DNF~冒險(xiǎn)島等地圖他們都有很多層的地圖層并且移動(dòng)速度不同~那么是如何實(shí)現(xiàn)的呢?下面我給大家講解一下具體實(shí)現(xiàn)原理,我做的是一個(gè)地圖編輯器,不過原理是一樣的
首先我們應(yīng)該知道我們的這個(gè)游戲有幾層我們先創(chuàng)建一個(gè)枚舉類型
enum MAPTYPE


{
ForeGround ,//前景層
Ground,//地圖層
BackGround,//背景層
FundusGround,//背景最后層
};
然后創(chuàng)建一個(gè)基類我們這里就叫做CMap
class CMap


{
public:
CMap(float _x,float _y,const int _ID,bool _bCheck = true);
virtual ~CMap();
void GameLogic(float _dt);//游戲主邏輯函數(shù)
void GameRender(); //游戲主渲染函數(shù)
void GameInit(); //游戲初始化函數(shù)
void GameReleaser(); //游戲釋放函數(shù)
virtual bool CheckActive()= 0; //子對(duì)象碰撞檢測(cè)
virtual bool ShowActive() = 0; //子對(duì)象是否顯示
virtual void Logic(float _dt) = 0; //子對(duì)象邏輯
virtual void Render() = 0; //子對(duì)象渲染
STRMAP StrMap; //地圖屬性
protected:
int ID;
float PosX,PosY; //對(duì)象位置
static HGE* g_pHGE; //HGE指針
int Width,Height; //對(duì)象寬和高度
static float StrWidth,StrHeight; //當(dāng)前卷動(dòng)寬度
static float ForeWidth,ForeHeight; //前景層卷動(dòng)寬和高度
static float FundusWidth,FundusHeight;//最后一層背景卷動(dòng)寬度和高度
static float BackWidth,BackHeight;//背景卷動(dòng)寬度和高度
static float Speed;//卷動(dòng)速度
};
從這里我們可以看到有3個(gè)卷動(dòng)坐標(biāo),我們可以認(rèn)為有3個(gè)視圖窗口,
可以看圖理解

我們可以通過CMap的派生類來創(chuàng)建地圖對(duì)象然后通過一個(gè)鏈表來管理這些對(duì)象
但是雖然我們有3個(gè)視圖但是我們要統(tǒng)一他們的坐標(biāo)~也就是我們最后看到的屏幕左上的坐標(biāo),當(dāng)然也許你創(chuàng)建的地圖有2級(jí)緩存~有可能左上并不是0,0點(diǎn)。自已定義了;
我們?cè)谂缮惱锟梢远x一個(gè)變量float x,float y;來存放這個(gè)對(duì)象的左上角坐標(biāo);
通過枚舉在我們創(chuàng)建這個(gè)地圖對(duì)象的時(shí)候給它賦值不同的視圖坐標(biāo)~就是我們先前定義的那3個(gè)視圖坐標(biāo)~
這樣就實(shí)現(xiàn)了多卷軸視差效果~