|
|
我写一段绘图的代码,缩略如下:
大意是循环精灵链表,将之绘出:
void CGame: rawUFO()
{
CUFO*p = pUFO;//pUFO是链首
for(p;p->next!=NULL;p=p->GetNext())
{
p->draw(m_lpDDBack,m_lpDDEnemy[1]);
}
}
上面的代码是可行的,但是改成下面的:
void CGame::DrawUFO()
{
for(pUFO;pUFO->next!=NULL;pUFO=p->GetNext())
{
pUFO->draw(m_lpDDBack,m_lpDDEnemy[1]);
}
}
结果啥也没画出来;
把for语句改成while语句:
while(pUFO!=NULL)
{
pUFO->draw(m_lpDDBack,m_lpDDEnemy[1]);
pUFO= pUFO->GetNext();
}
这时候那几个图终于出来了,但是不会运动,
draw函数如下:
BOOL CUFO::draw(LPDIRECTDRAWSURFACE oragin, LPDIRECTDRAWSURFACE source)
{
RECT rcRect;
// HRESULT hRet;
int iDiffRight;
int iDiffLeft;
int iDiffBottom;
rcRect.left = ArgPosX;
rcRect.top = ArgPosY;
rcRect.right = rcRect.left +70;
rcRect.bottom = rcRect.right +70;
rcRect.left = ArgPosX;
rcRect.top = ArgPosY;
rcRect.right = ArgPosX + 70;
rcRect.bottom = ArgPosY + 70;
if (m_x+70>640)
{
iDiffRight = m_x+70-640;
rcRect.right -= iDiffRight;
}
else
iDiffLeft = 0;
if (m_x<0)
{
iDiffLeft = m_x * (-1);
rcRect.left += iDiffLeft;
}
else
iDiffLeft = 0;
if (m_y < 0)
{
iDiffBottom = m_y * (-1);
rcRect.top += iDiffBottom;
}
else
iDiffBottom = 0;
oragin->BltFast(m_x+iDiffLeft, m_y+iDiffBottom, source, &rcRect, TRUE);
move();
ArgPosX +=70;
if(ArgPosX ==350)
{
ArgPosX = 0;
ArgPosY +=70;
if(ArgPosY == 700)
ArgPosY = 0;
}
return TRUE;
}
为啥会这样啊!!! |
|