對於遊戲程式設計而言,我也是個初學者,這個遊戲程式設計入門系列的文章,就當作是我在學習遊戲程式設計的筆記和階段小結吧。我們先從最簡單的「精靈」開始,暫時我們不需要考慮directx或是opengl,不需要考慮3維等等這些複雜情形,直接使用gdi+繪圖功能就可以了。
精靈,是構成遊戲中活動體(比如,飛機、野獸等遊戲人物)的最基本單元,任何乙個活動體都可以由乙個或多個精靈組合而成,每個精靈都是乙個物件例項,它能夠繪製自己、移動(更複雜的還可以旋轉)等等基本動作。
我讓所有的精靈都實現isprite介面,該介面如下:
對應的**如下:
public
inte***ce
isprite
//繪製的裝置
bitmapsource
//精靈表面位圖
imagebackgroundimage
//遊戲背景
pointlocation
void
erase();
void
draw();
void
setdirection(compassdirectionsdir);
void
move();
}public
enum
compassdirections
這個介面也許並不是完整的,隨了實際的深入,可能還會有很多的元素新增進來,甚至compassdirections列舉還可以進一步細分,但是isprite已經有最基本「精靈」功能了。對於大多數簡單的任務,我們已經可以給出isprite的乙個實現:
public
class
sprite:isprite
}private
bitmapsource
=null
;public
bitmapsource
}private
pointlocation
=new
point(0,
0);public
pointlocation
}#region
backgroundimage
private
imagebackgroundimage
=null
;public
imagebackgroundimage
}#endregion
public
void
erase()
public
void
draw()
public
void
setdirection(compassdirectionsdir)
public
void
move()if(
this
.direction
==compassdirections.east)if(
this
.direction
==compassdirections.west)if(
this
.direction
==compassdirections.north)
}#endregion}
我們要特別注意erase方法的實現,所謂erase實際上就是用背景圖對應的區域重新繪製精靈所在的區域表面--這種技巧在遊戲程式設計中是最基本的技巧之一。
當精靈接收到遊戲環境的時鐘脈衝通知時,最常見的方法呼叫組合是:
thesprite.erase();
thesprite.move();
thesprite.draw();
首先,精靈擦除自己,然後依據方向compassdirections移動自己到新的位置,最後在新的位置繪製自己。
所以,當時鐘脈衝連續不斷的到來時,我們就可以看到精靈在移動了,通過我們的遊戲操縱桿或鍵盤我們可以呼叫目標精靈的setdirection方法來指定其要移動的方向。
下篇文章,我們將基於isprite構建乙個最簡單的遊戲示例,在這個示例中,我們可以通過鍵盤的方向鍵來控制遊戲中主角的移動。
遊戲程式設計入門手冊
遊戲製作新人 用什麼語言和編譯器來做遊戲?directx是什麼?學程式設計需要哪些書?我怎樣製作遊戲?哪些書是介紹遊戲開發的?vc好還是c 好?給c 初學者的50個忠告 文獻 程式設計新手真言 具備程式基礎 如何用directx製作2d遊戲?如何使用directinput?如何在遊戲中顯示文字?如何...
遊戲程式設計入門手冊
遊戲製作新人 用什麼語言和編譯器來做遊戲?directx是什麼?學程式設計需要哪些書?我怎樣製作遊戲?哪些書是介紹遊戲開發的?vc好還是c 好?給c 初學者的50個忠告 文獻 程式設計新手真言 具備程式基礎 如何用directx製作2d遊戲?如何使用directinput?如何在遊戲中顯示文字?如何...
程式設計入門1
2017.11.13 決定學程式設計 sikaru總讓我直接看 但我覺得還是要從基礎學起 歐姆定律 光年是計量天體間時空距離的單位,一般被用於衡量天體間的時空距離,其字面意思是指光在真空中沿直線傳播一年的距離,約為94605億千公尺,是由時間和光速計算出來的。真空中的 光速是乙個重要的物理常量 國際...