684
社区成员
发帖
与我相关
我的任务
分享
CCriticalSection m_CS; //声明临界区对象
static UINT DrawScoreThread(LPVOID pParam); //声明线程函数,这个函数是画分数的数字
DrawTime(); //画剩余时间的数字
DrawLife(); //画剩余生命的数字
DrawBomb(); //画炸弹的个数的数字
DrawBackground(); //画背景
pGameBuffer->DrawImage(m_Stage.Player.pMove,Rect(m_Stage.Player.X,m_Stage.Player.Y,62,46),0,0,62,46,UnitPixel); //画飞船
AfxBeginThread(DrawScoreThread,this); //创建线程
Sleep(20); //让主线程睡眠20毫秒,让新创建的线程画图
UINT CBeyondTheCosmosDlg::DrawScoreThread(LPVOID pParam) //新创建的线程
{
CBeyondTheCosmosDlg *CBTC=(CBeyondTheCosmosDlg*)pParam;
CBTC->m_CS.Lock(); //进入临界区
CBTC->DrawScore(); //画分数
CBTC->m_CS.Unlock(); //离开临界区
return 0;
}
void CBeyondTheCosmosDlg::DrawScore() //画分数的函数
{
//pGameBuffer是Graphics类的指针,这个pGameBuffer的作用是缓冲,先把数字画在pGameBuffer上,再一次性画在真正的与DC相关联的Graphics类对象上,这样可以防止画面闪烁
int s=m_Stage.Player.nScore;
pGameBuffer->DrawImage(m_Stage.pNumber,Rect(540,260,64/3,96/3),((s/1000000)%10)*64,0,64,96,UnitPixel); //画百万位数字
pGameBuffer->DrawImage(m_Stage.pNumber,Rect(540+64/3,260,64/3,96/3),((s/100000)%10)*64,0,64,96,UnitPixel); //画十万位数字
pGameBuffer->DrawImage(m_Stage.pNumber,Rect(540+(64/3)*2,260,64/3,96/3),((s/10000)%10)*64,0,64,96,UnitPixel); //画万位数字
pGameBuffer->DrawImage(m_Stage.pNumber,Rect(540+(64/3)*3,260,64/3,96/3),((s/1000)%10)*64,0,64,96,UnitPixel); //以此类推
pGameBuffer->DrawImage(m_Stage.pNumber,Rect(540+(64/3)*4,260,64/3,96/3),((s/100)%10)*64,0,64,96,UnitPixel);
pGameBuffer->DrawImage(m_Stage.pNumber,Rect(540+(64/3)*5,260,64/3,96/3),((s/10)%10)*64,0,64,96,UnitPixel);
pGameBuffer->DrawImage(m_Stage.pNumber,Rect(540+(64/3)*6,260,64/3,96/3),(s%10)*64,0,64,96,UnitPixel);
}