本范例主要是介绍图形对象及对象中新增的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