C#基礎視頻教程7.1 如何編寫簡單遊戲
要做一個FlappyBird,最核心的功能是創建幾個區塊,如果發生碰撞則遊戲結束(小鳥撞到管子上,或者小鳥到地上),至於隨機生成一些管子,小鳥如何跳躍,最後如何統計分數,都不難想通要怎麽做。
?
首先是知道如何在窗體上繪制你要的東西,C#為我們提供了GDI+的功能,你可以定義一個Graphic對象,然後調用它的Draw方法,可以發現能繪制的東西很多,矩形,橢圓,多邊形,曲線等等(繪制的是多邊形,用的是pen的實例,填充的也是多邊形,用的是solidbrush實例,當然除了pen和solidbrush還有別的工具,你可以繪制虛線,箭頭等等)
?
繪制的時候註意是靠的是Paint方法,這個方法並不會主動執行,而是只在需要的時候執行(比如窗體改變大小,窗體被移動之類的),所以我在拖動滾動條之後,要人為地觸發窗體的Refresh方法來更新繪圖(我做了一個label來檢測真正Paint方法的執行次數,這也是比較重要的調試技巧,想要測試一個東西是否執行,光MessageBox輸出來對於復雜的情況還是不夠的)
?
有了這麽兩個區域之後(一個固定,一個X,Y,Width,Height都由四個滾動條決定),我們就可以測試碰撞了。貌似C#並沒有為我們提供兩個區域的碰撞檢測方法。比較容易想到的是遍歷每個窗口的點,如果這個點存在於A區域,也存在於B區域,則認為AB區域重疊了,也就是碰撞了。我們屏幕的像素點很多(至少800*600幾十萬個點),如果真的要一個一個點遍歷過來會耗費很多資源。所以為了提高效率,可以等間距采樣就行了。下圖我隨便測試了一下比較粗略的情況,我手動讓黃色方塊運動到產生一個疊加點,確實可以檢測到碰撞了(當然其實左邊的情況也碰撞了)
?
不難想到,我把精度提高一倍,就能檢測到初始化的時候碰撞的情況了(其實那些密密麻麻的小黑點沒必要畫出來,浪費系統資源,現在為了做測試還是要把草稿打出來的)
?
?
更多教學視頻和資料下載,歡迎關註以下信息:
我的優酷空間:
http://i.youku.com/acetaohai123
?
我的在線論壇:
http://csrobot.gz01.bdysite.com/
?
問題交流:
QQ:910358960
郵箱:[email protected]
C#基礎視頻教程7.1 如何編寫簡單遊戲