實(shí)習(xí)的日子,最大的成果就是做了兩個(gè)小游戲。一個(gè)是山寨版的雷電,一個(gè)是網(wǎng)絡(luò)版瘋狂的石頭。
兩個(gè)都是3人團(tuán)隊(duì)趕出來的作業(yè),雷電用了1周,石頭用了2周半。這一個(gè)多月很好的體會(huì)了敏捷開發(fā),重構(gòu),團(tuán)隊(duì)合作。
由于是趕出來的東西,還有很多小Bug, 但怎么說也是個(gè)完整的程序了。
山寨雷電用的是破解出來的Starcraft 2的3D模型,用opengGL做了一個(gè)極簡(jiǎn)單的"引擎",僅做模型渲染用。敵人的出現(xiàn)次序通過配置文件指定,由于時(shí)間關(guān)系這里的配置方法太簡(jiǎn)陋,關(guān)卡的配置文件應(yīng)該可以做得更好。自己添加了一些美術(shù)資源,比如爆炸碎片是隊(duì)友用3DMax畫的面片。爆炸用photoshop編輯過的。
戰(zhàn)機(jī)發(fā)出的激光束實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的骨骼動(dòng)畫,激光束是一條虛擬的"繩子"(即骨骼),圖元在繩子的左右兩邊進(jìn)行渲染。最初的設(shè)計(jì)用粒子效果,但是當(dāng)戰(zhàn)機(jī)左右移動(dòng)時(shí)候,激光粒子就會(huì)散開,改用骨骼動(dòng)畫之后不會(huì)有這個(gè)情況,因?yàn)?繩子"一直跟隨戰(zhàn)機(jī)。
山寨瘋狂的石頭用純python打造,有server和client端,server管理游戲大廳。client端用了pygame做底層庫(實(shí)質(zhì)是SDL庫),CPU占用率有點(diǎn)高。
支持8個(gè)房間,一個(gè)游戲場(chǎng)景最多4個(gè)人網(wǎng)絡(luò)對(duì)戰(zhàn),通過推不同效果的箱子攻擊對(duì)方。用冰凍,爆炸等效果。通過做這個(gè)小游戲很好地理解了動(dòng)作游戲的網(wǎng)絡(luò)同步問題,期間還研究了一下盛大泡泡堂的通信方式。在有網(wǎng)絡(luò)延時(shí)的環(huán)境下,如何處理玩家響應(yīng),邏輯同步,防止外掛三個(gè)方面平衡是個(gè)挑戰(zhàn)。在本設(shè)計(jì)中,位置由客戶端往服務(wù)端同步,而對(duì)于傷害,攻擊,推箱等邏輯則需由服務(wù)器同一仲裁,客戶端需等待服務(wù)器仲裁結(jié)果再作出反應(yīng)。
