1. 程式人生 > >C#基礎視頻教程7.1 如何編寫簡單遊戲

C#基礎視頻教程7.1 如何編寫簡單遊戲

碰撞檢測 pen brush 技術分享 像素點 現在 alt 需要 執行

要做一個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 如何編寫簡單遊戲