本范例主要是介紹圖形對象及對象中新增的Region屬性.首先要說明圖形對象并不是用于繪制,而是圖形的封裝,一個圖形實例只對應一種圖形,若想創造復雜的圖形則只能通過多個單個圖形組合.范例運行后會在屏幕中顯示一幅帶有邊框的圖片,當按鍵盤的左/右鍵,圖片會逆/順時針旋轉,這時邊框會根據圖片的新區域重繪(將以圖片的最小X和Y點為左上角,以圖片當前的最大X和Y點為右下角).
范例中只用到BODY類的兩個函數:OnInitialize和KeyPass事件處理,代碼如下:
//初始化事件
bool CMyGameBody::OnInitialize(){
//如果沒有自定義的流程規劃,則系統需調用以下語句:
__super::OnInitialize();
_SIZE siSize;
_POINT piPos;
m_lpFMHandles->pResourceLib->LoadTexture("data.pap");
m_lpFMHandles->pResourceLib->Add("data\\Background.png", "BackGround");
//創建一個圖片
CGameObjectSprite* pSprite = new CGameObjectSprite();
siSize.cx = 300;siSize.cy = 150;
pSprite->Create("BG", siSize, m_lpFMHandles->pResourceLib->GetTexture("BackGround"));
//設置旋轉的中心點
pSprite->SetAnchorPosition(_POINT(170, 90));
pSprite->MoveTo(_POINT(400, 200));
//返回圖片的當前狀態下的區域大小
_RECT rc = pSprite->GetRegion();
//創建一個圖形(默認為四方體)
CGameObjectGraph* pGraph = new CGameObjectGraph();
siSize.cx = siSize.cy = 100;
//根據圖片區域大小創建
pGraph->Create("Graph", _SIZE(rc.right-rc.left, rc.bottom-rc.top), g_lpDefaultResource);
pGraph->MoveTo(_POINT(rc.left, rc.top));
//添加對象至指定環節下
m_pCurrentSection->GetGameView()->GetBy("default")->GetBy("default")->Add((IGameObject*)pSprite->QueryInterface(IID_IGameObject, VER_IGameObject), "Pic");
m_pCurrentSection->GetGameView()->GetBy("default")->GetBy("default")->Add((IGameObject*)pGraph->QueryInterface(IID_IGameObject, VER_IGameObject), "Graph");
return true;
}
//鍵盤事件
bool CMyGameBody::OnKeyPass(int nType, int nKey, char cChar){
//只處理KEYUP事件
if(nType==INPUT_KEYDOWN) return false;
//受理鍵盤左/右方向鍵
if(nKey==37 || nKey==39){
static fAngle = 0;
if(nKey==37){
//逆轉45度
fAngle -=45;
}
else{
//順轉45度
fAngle +=45;
}
//返回圖片對象并旋轉至指定角度
IGameObject* pIGameObject = m_pCurrentSection->GetGameView()->GetObject("default\\default\\Pic");
pIGameObject->SetAngle(fAngle);
//返回圖片的當前狀態下的區域大小
_RECT rc = pIGameObject->GetRegion();
//返回圖形對象
pIGameObject = m_pCurrentSection->GetGameView()->GetObject("default\\default\\Graph");
IGameObjectGraph* pIGraph = GET_OBJECTPTR_INTERFACE(pIGameObject, IGameObjectGraph);
//移動至區域的左上角
pIGameObject->MoveTo(_POINT(rc.left, rc.top));
//調整圖形大小
pIGraph->AdjustPoints(_SIZE(rc.right-rc.left, rc.bottom-rc.top));
}
return true;
}
運行結果:
原始狀態
-135度時的狀態。上邊及右邊的線條可能因圖片壓縮狀態的情況下沒有顯示出來。
范例下載地址:
http://dl2.csdn.net/down4/20070806/06122825642.rar
范例代碼下載地址:
http://dl2.csdn.net/down4/20070806/06122941126.rar