怎样做小游戏挖金子(VC,源码4)
?有人下載我的工程文件,“我很欣慰”,名字是“挖金子VC版源碼”,大家多討論。
上回講哪了?地圖加載了,物品能顯示了。該顯示畫面上方擺動的叉子了。計算機圖形學的“圖形旋轉”,當然,有一個WINDOWS API函數PlgBlt,可我沒有用。網上有很多介紹圖形旋轉的文章,我還是講解一下我這個函數:
void?GAMECATCH::TcDrawAngleOff(HDC?hdc,int?*pv,float?a,int?num,int?x0,int?y0){
????int?pvdest[20]={0};
//????int?x0,y0;
????int?i;
????int?tempx,tempy;
????
????memcpy(pvdest,pv,sizeof(int)*num);
/*
????x0=pv[0];
????y0=pv[1];
????//move
????for(i=0;i<num;i+=2)
????{
????????pvdest[i]-=x0;
????????pvdest[i+1]-=y0;
????}
*/
????//rotate
????for(i=0;i<num;i+=2)
????{
????????tempx=pvdest[i];
????????tempy=pvdest[i+1];
????????pvdest[i]=tempx*cos(a)-tempy*sin(a);
????????pvdest[i+1]=tempx*sin(a)+tempy*cos(a);
????}
????//move,中心點坐標是320?58
????for(i=0;i<num;i+=2)
????{
????????pvdest[i]+=x0;
????????pvdest[i+1]+=y0;
????}
????//繪制圖形
????Draw(hdc,pvdest);
}
為什么我沒有刪除注釋掉的代碼?有原因。一個圖形繞(x0,y0)旋轉,總共分三步(耳熟):圖形移動到坐標原點,旋轉,再移動回原有位置。而我這個叉子的圖形在哪里?就在原點。所以省略了第一步。叉子的圖形,是畫了幾個線段,各端點坐標如下(x1,y1,x2,y2,...):
?//設置爪子各頂點坐標
?int temp[12]={
?0,32,20,32,
?40,0,64,0,
?64,64,40,64
?};
再解釋一下公式:
??????pvdest[i]=tempx*cos(a)-tempy*sin(a);
????????pvdest[i+1]=tempx*sin(a)+tempy*cos(a);
屏幕坐標軸x向右,y向下,這個公式將逆時針旋轉圖形。
有一個問題,為什么不用一個位圖?位圖的顯示效果雖然好,但是計算cos,sin時,會產生誤差。這將使圖像有一些變形,所以沒有用位圖。
繪制、擺動的問題解決了。下面是伸縮。
叉子的伸縮
關鍵是使用“狀態機”。三種狀態:擺動,伸出,拉回。我沒有定義宏,應該批評。用0 1 2 表示的。
再次聲明軟件的“可維護性”,這種狀態設置,也許瑣碎,但有好處。
擺動狀態:修改當前角度,當前擺動方向;
伸出狀態:改變坐標,如果達到伸出的最大長度,則狀態遷移:拉回;
拉回狀態:改變坐標,如果“伸出長度”降為0,則狀態遷移:擺動。
為了消除坐標計算的誤差,伸出時,直接將坐標偏移值轉為整型存儲,如下:
???xoff=10*cos(iAngle*10*1.57/90);
???yoff=10*sin(iAngle*10*1.57/90);
拉回的時候,也用相同的偏移值,只要再乘以一個系數,就實現了拉回的快慢不同。
按鍵檢測
用戶按“下”,叉子伸出。用按鍵消息來檢測,代碼為:
????????case?WM_KEYDOWN:????????????switch(iGameState)
????????????{
????????????case?GAME_STATE_MAIN:
????????????????gamecatch.KeyProc(wParam); void?GAMECATCH::KeyProc(int?iKey)
{
????switch(iKey)
????{
????case?VK_DOWN:
????????if(0==iState)
????????{
????????????//擺動狀態下才能變成伸出狀態
????????????iState=1;
????????????xoff=10*cos(iAngle*10*1.57/90);
????????????yoff=10*sin(iAngle*10*1.57/90);
????????}
????????break;
目前,叉子能正常擺動,用戶按“下”,叉子伸出,然后拉回。緊接著就是核心問題“抓到物品”,即“檢測碰撞”,下回接著說。歡迎參考原工程“挖金子VC版源碼”(在CSDN下載頻道)。
總結
以上是生活随笔為你收集整理的怎样做小游戏挖金子(VC,源码4)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Silverlight 4 Tools
- 下一篇: jQuery lightbox插件(相册