十年前,那時(shí)候的網(wǎng)吧還不叫網(wǎng)咖,那時(shí)候沒有王者榮耀也沒有英雄聯(lián)盟,那時(shí)候夢(mèng)幻西游剛推出珍寶閣系統(tǒng),那時(shí)候巫妖王的靈魂還封閉在冰封王座。
尋仙、穿越火線、征途、天龍八部……同時(shí)在線人數(shù)超百萬(wàn)的游戲紛紛涌現(xiàn),那個(gè)中國(guó)網(wǎng)游群芳斗艷的年代,地下城與勇士無(wú)疑是最耀眼的那個(gè)。
DNF當(dāng)年有多火?那年小編還在讀初中,跟同學(xué)去網(wǎng)吧,一排排全是在玩DNF,當(dāng)時(shí)有人爆了一把雙龍魔影光劍,整個(gè)網(wǎng)吧都炸了,一個(gè)地主家的傻兒子當(dāng)即把手機(jī)押那兒,然后沖回家再取800塊,一出門就摔了一跤,滋溜就爬起來(lái)繼續(xù)跑,一邊跑一邊喊千萬(wàn)別賣給別人……
不過(guò)呢,玩游戲不如做游戲,再牛逼的游戲號(hào)在程序員的眼里就是一堆代碼,所以今天呢,小編要跟大家說(shuō)說(shuō)如何進(jìn)行游戲開發(fā)。
作為一款橫屏格斗游戲,絢麗的畫面和流暢的動(dòng)作是DNF的精髓,那么我們先從畫面和動(dòng)作著手。
關(guān)于GDI的初步認(rèn)知
什么是GDI,GDI是windows與生俱來(lái)的圖形設(shè)備接口(GraphicsDeviceInterface)的英文縮寫,主要任務(wù)是負(fù)責(zé)系統(tǒng)與繪圖程序之間的信息交換,處理所有Windows程序的圖形和圖像輸出。
利用它我們可以很輕松的在屏幕上繪制圖形了。也能利用它開發(fā)一些繪制要求不高的游戲,比如小時(shí)候玩的魂斗羅,超級(jí)瑪麗啊等小游戲,或一些RPG(角色扮演類)小游戲,我們都是可以用GDI制作的。
雖然LOL,DNF,QQ炫舞等這些游戲是DirectX或OpenGL這類圖形接口,但對(duì)新手小白來(lái)說(shuō)最簡(jiǎn)單的還是GDI。
準(zhǔn)備一張BMP格式的背景圖片,創(chuàng)建一個(gè)窗體,在窗體上進(jìn)行繪制,然后通過(guò)GetDC函數(shù)來(lái)獲取窗體的設(shè)備環(huán)境DC
獲取設(shè)備環(huán)境后,還需要在內(nèi)存中創(chuàng)建一個(gè)設(shè)備環(huán)境,我們?cè)趦?nèi)存中畫圖,畫好以后,直接拷貝到窗體的設(shè)備環(huán)境上

關(guān)于初步動(dòng)畫實(shí)現(xiàn)
3D是渲染的藝術(shù),具備動(dòng)畫狀態(tài)機(jī)和混合樹的方案在如今基本是標(biāo)配,如常見的Unity的Mecanim,UE4的Animation Blueprint。
那如何利用GDI在游戲中實(shí)現(xiàn)動(dòng)畫效果呢?
2D游戲是貼圖的藝術(shù),貼圖基本有兩種方式,一種采用定時(shí)器,一種則是利用消息循環(huán),目前都是采用的第二種繪制方式(消息循環(huán)),也就是說(shuō)游戲中的動(dòng)畫都是一幀一幀的帖上去的,就像放電影一樣。
例如這個(gè)動(dòng)畫(素材來(lái)自DNF),通過(guò)一個(gè)數(shù)組把他們保存起來(lái),然后依次播放。下面是部分代碼:
運(yùn)行效果圖:
是不是感覺還不錯(cuò)呢?其實(shí)地下城與勇士這類游戲是比較適合新手小白開發(fā)的,相比于3D游戲的骨骼動(dòng)畫,2D橫版游戲的序列幀更簡(jiǎn)便。
在這個(gè)娛樂化時(shí)代,游戲已經(jīng)融入到我們的生活成為了一種生活方式,游戲開發(fā)也是當(dāng)下和未來(lái)絕對(duì)熱門的行業(yè),但是對(duì)于初學(xué)者而言呢,缺乏經(jīng)驗(yàn)和指導(dǎo)往往會(huì)舉步維艱。
-
編程
+關(guān)注
關(guān)注
88文章
3689瀏覽量
95269 -
C++
+關(guān)注
關(guān)注
22文章
2119瀏覽量
75329
原文標(biāo)題:實(shí)戰(zhàn)開發(fā):新手小白如何用C++制作經(jīng)典網(wǎng)游DNF
文章出處:【微信號(hào):TheAlgorithm,微信公眾號(hào):算法與數(shù)據(jù)結(jié)構(gòu)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄



如何用STM32CubeMX生成底層代碼?代碼中C++的編寫要注意哪些事項(xiàng)?
如何學(xué)習(xí)C++,如何學(xué)好C++
C語(yǔ)言C++運(yùn)用
如何用C++做一個(gè)TCP的服務(wù)器進(jìn)行數(shù)據(jù)觀察及采集呢
C++的初步入門基礎(chǔ)教程免費(fèi)下載

評(píng)論