版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Java游戲編程原理與實(shí)踐教程主編主編 陳銳陳銳 夏敏捷夏敏捷人民郵電出版社人民郵電出版社 游戲開發(fā)是藝術(shù)與科學(xué)的結(jié)合,是策劃,美術(shù),程序三者間的協(xié)調(diào)以及創(chuàng)意與商業(yè)的平衡,集故事、音樂(lè)、動(dòng)畫等多元素于一身。 目前Java不僅可以開發(fā)臺(tái)式機(jī)游戲,而且隨著智能手機(jī)的普及,目前支持Java的手機(jī)性能上已經(jīng)接近第二代控制臺(tái)游戲機(jī),因此手機(jī)游戲大規(guī)模使用的時(shí)代已經(jīng)來(lái)臨,可見Java 游戲開發(fā)市場(chǎng)廣大。第4章 Java游戲程序的基本框架4.1 動(dòng)畫的類型及幀頻動(dòng)畫的類型及幀頻動(dòng)畫的制作是游戲設(shè)計(jì)的基礎(chǔ),幾乎所有的游戲都是在動(dòng)畫的基礎(chǔ)上添加人機(jī)交互功能、以及增加劇情功能等等延伸來(lái)的。因此動(dòng)畫的制作是游戲開發(fā)
2、的必須了解的知識(shí),也是游戲制作基本元素。4.1.1 動(dòng)畫類型動(dòng)畫類型動(dòng)畫主要分為影視動(dòng)畫和游戲動(dòng)畫兩種。影視動(dòng)畫就是使用專業(yè)動(dòng)畫軟件編輯出來(lái)的效果很好的動(dòng)畫視頻,投影機(jī)以每秒二十四格的速度投射在銀慕上. 游戲動(dòng)畫則不同于影視動(dòng)畫,是在屏幕上顯示一系列連續(xù)動(dòng)畫畫面的第一幀圖形,然后在每隔很短的時(shí)間顯示下一幀圖像,如此反復(fù) 4.1.2 設(shè)置合理的幀頻設(shè)置合理的幀頻FPSFPS顧名思義,就是每秒鐘的幀數(shù)。每一幀就是一幅靜態(tài)圖像,電影的播放速度是24FPS,但是一般游戲速度達(dá)到10FPS就明顯感覺(jué)到動(dòng)畫的效果了。 4.2 游戲動(dòng)畫的制作游戲動(dòng)畫的制作4.2.1 繪制動(dòng)畫以及動(dòng)畫循環(huán)既然動(dòng)畫就是將一連串
3、的圖像快速的循環(huán)播放,所以就需要使用循環(huán)語(yǔ)句控制圖像的連續(xù)播放,由于動(dòng)畫需要一定的播放速度,因此需要連續(xù)播放動(dòng)畫的同時(shí)能夠控制動(dòng)畫的播放速度,最好使用線程中的暫停函數(shù)來(lái)實(shí)現(xiàn)。while(true)處理游戲功能;使用repaint()函數(shù)要求重畫屏幕暫停一小段時(shí)間;/幀頻FPS控制4.2.2 消除動(dòng)畫閃爍現(xiàn)象雙緩沖技術(shù)一個(gè)動(dòng)畫在運(yùn)行的時(shí)候,如果圖像的切換是在屏幕上完成的,則可能會(huì)造成屏幕的閃爍,消除動(dòng)畫閃爍現(xiàn)象的最佳方法是使用雙緩存技術(shù)。雙緩沖技術(shù)的工作原理:先在內(nèi)存中分配一個(gè)和我們動(dòng)畫窗口一樣大的空間(在內(nèi)存中的空間我們是看不到的),然后利用getGraphics()方法去獲得雙緩沖畫筆,接著
4、利用雙緩沖畫筆給空間我們想畫的東西,最后將它全部一次性的顯示到屏幕上這樣在我門的動(dòng)畫窗口上面是顯示出來(lái)就非常的流暢了避免了上面的閃爍效果。4.3 使用定時(shí)器使用定時(shí)器定時(shí)器在游戲開發(fā)中是相當(dāng)重要的,前面提到動(dòng)畫的實(shí)現(xiàn)就是通過(guò)顯示時(shí)間的控制達(dá)到視覺(jué)暫停的效果,除了使用線程的暫停函數(shù)sleep()函數(shù)外,還有一個(gè)重要的計(jì)時(shí)工具,那就是Timer組件。Timer組件可以定時(shí)執(zhí)行任務(wù),這在游戲動(dòng)畫編程上非常有用。Timer組件可以使javax.swing.Timer包中的Timer類來(lái)實(shí)現(xiàn),該類的構(gòu)造方法為:Timer(intdelay, ActionListenerlistener);在游戲編程中,
5、在組件內(nèi)容更新時(shí)經(jīng)常用到Timer,例如JPanel、JLabel等內(nèi)容更新。本書中俄羅斯方塊游戲就采用定時(shí)器Timer實(shí)現(xiàn)控制方塊的下落的。下面是一個(gè)簡(jiǎn)單的每隔500毫秒顯示時(shí)間的Swing程序3-2,可以加深對(duì)Timer的使用的理解。4.4 設(shè)置游戲難度設(shè)置游戲難度一般來(lái)說(shuō),一款游戲要增強(qiáng)它的可玩性,就需要有合理的游戲難度,使玩家不容易感覺(jué)厭煩,同時(shí)增加玩家者的挑戰(zhàn)欲望。例如智力游戲可以在人工智能方面下功夫,但是由于人工智能在游戲里面很難真正的控制游戲本身的難度,所以往往使通過(guò)其他的手段實(shí)現(xiàn)游戲的難度控制,比較增加游戲進(jìn)行的速度,比如俄羅斯方塊,可以增加方塊下落的速度?;蛘呤褂迷黾佑螒蜿P(guān)數(shù)
6、、減少玩家的思考時(shí)間等等。難度的設(shè)置的開發(fā)需要根據(jù)具體的游戲情況而定,很難一概而論。如果使用速度控制游戲難度,則可以把游戲設(shè)計(jì)成為具有很多個(gè)級(jí)別,每隔級(jí)別游戲的運(yùn)行速度都不一樣,類似的代碼可以如下所示:public void level()if(level =3)speed = 1;/設(shè)置游戲速度為設(shè)置游戲速度為1else if(level = 4)speed = 2;/設(shè)置游戲速度為設(shè)置游戲速度為24.5 游戲與玩家的交互游戲與玩家的交互對(duì)于游戲而言,交互性就是生命,優(yōu)異的作品總是體現(xiàn)在人物與場(chǎng)景之間的高互動(dòng)性、人物與人物(NPC)之間的高互動(dòng)性以及玩家與玩家之間(多人模式)的高互動(dòng)性,這是
7、真正能讓人溶入其中的動(dòng)力所在,因此一款好的游戲必然擁有一個(gè)良好的游戲與玩家之間的互動(dòng)方式。游戲與玩家的交互都是通過(guò)鍵盤或者鼠標(biāo)實(shí)現(xiàn)的。具體的方法在第1章中已經(jīng)詳細(xì)介紹了。下面舉一個(gè)簡(jiǎn)單的例子,在小球下落時(shí)可以通過(guò)鍵盤控制其左右移動(dòng)。由于實(shí)現(xiàn)鍵盤監(jiān)聽,所以TetrisPanel加入KeyListener接口。同時(shí)為控制X坐標(biāo)增加xpos變量。4.6 游戲中碰撞檢測(cè)游戲中碰撞檢測(cè)我們?cè)谟螒蜷_發(fā)中總會(huì)遇到這樣那樣的碰撞,并且會(huì)很頻繁的去處理這些碰撞,這也是游戲開發(fā)的一種基本的算法。常見碰撞算法是矩形碰撞,圓形碰撞,像素碰撞。矩形碰撞用的最多。4.6.1 矩形碰撞矩形碰撞通過(guò)檢測(cè)一個(gè)矩形的4個(gè)頂點(diǎn)是否
8、在另外一個(gè)矩形的內(nèi)部來(lái)完成 .4.6.2 圓形碰撞圓形碰撞可以通過(guò)比較兩個(gè)對(duì)象間的距離和兩個(gè)對(duì)象半徑的和的大小,很快實(shí)現(xiàn)這種檢測(cè)。如果它們之間的距離小于半徑的和,就說(shuō)明產(chǎn)生了碰撞 4.6.3 像素碰撞像素碰撞4.7 游戲中圖像繪制游戲中圖像繪制Graphics類中提供了不少繪制圖形的方法,但對(duì)于復(fù)雜圖形,大部分都事先利用專用的繪圖軟件繪制好,將它們按一定的格式存入圖像文件。Java程序運(yùn)行時(shí),將它裝載到內(nèi)存里,然后在適當(dāng)?shù)臅r(shí)機(jī)將它顯示在屏幕上。4.7.1 圖像文件的裝載圖像文件的裝載Java目前所支持的圖像文件格式通常有GIF、PNG和JPEG格式(帶有.GIF、.JPG、.JPEG后綴名的文
9、件) .Java特別提供了java.awt.Image包來(lái)管理與圖像文件有關(guān)的信息,因此執(zhí)行與圖像文件有關(guān)的操作時(shí)需要import這個(gè)包。java.awt.image包提供可用于創(chuàng)建、操縱和觀察圖像的接口和類。每一個(gè)圖像都用一個(gè)java.awt.Image對(duì)象表示。除了Image類外,java.awt包還提供了其他的基本的圖像支持,例如Graphics類的drawImage()方法,Toolkit對(duì)象的getImage()方法及MediaTracker類。Toolkit類提供了兩個(gè)getImage()方法來(lái)加載圖像。在Java中獲取一個(gè)圖像文件,可以調(diào)用Toolkit類提供getImage()
10、方法。但是getImage方法會(huì)在調(diào)用后馬上返回,如果此時(shí)馬上使用getImage獲取的Image對(duì)象,而這時(shí)Image對(duì)象并沒(méi)有真正裝載或者裝載完成。所以,我們?cè)谑褂脠D像文件時(shí),使用java.awt包中的MediaTracker跟蹤一個(gè)Image對(duì)象的裝載,可以保證所有圖片都加載完畢。4.7.2 圖像文件的顯示圖像文件的顯示getImage( )方法僅僅是將圖像文件裝載進(jìn)來(lái),交由Image對(duì)象管理。而把得到的Image對(duì)象中的圖像顯示在屏幕上,則通過(guò)傳遞到paint()方法的Graphics對(duì)象可以很容易地顯示圖像。具體顯示需要調(diào)用Graphics類的drawImage( )方法,它能完成將
11、Image對(duì)象中的圖像顯示在屏幕的特定位置上,就像顯示文本一樣方便。drawImage( )方法的常見調(diào)用格式如下:boolean drawImage(Image img, int x, int y, ImageObserver observer) 4.7.3 繪制卷軸型圖像卷軸型圖像通常都要超過(guò)程序窗口的尺寸,若采用上一節(jié)介紹的圖像繪制方法來(lái)繪制卷軸型圖像,則只能顯示出圖像的一部分。事實(shí)上,在繪制卷軸型圖像時(shí)往往都需要讓其滾動(dòng)顯示以制造移動(dòng)效果,讓圖像的不同部分依次從程序窗口中“經(jīng)過(guò)”,就如同坐火車的情形,卷軸型圖像好比風(fēng)景,程序窗口則好比車窗。 圖圖4-5 圖像坐標(biāo)系到程序序窗口坐標(biāo)系的變
12、換圖像坐標(biāo)系到程序序窗口坐標(biāo)系的變換圖中的坐標(biāo)變換可通過(guò)調(diào)用程序窗口的Graphics對(duì)象的另一個(gè)drawlmage方法來(lái)實(shí)現(xiàn),該方法帶有10個(gè)參數(shù),具體定義如下:drawlmage(im, t dxl, f dyl, dx2, dy2, : sxl, sylr sx2, sy2, observer);其中第1個(gè)參數(shù)表示源圖像,第2至第9個(gè)參數(shù)的含義如圖4-5所示: dxl和dyl為目標(biāo)區(qū)域左上角坐標(biāo); dx2和dy2為目標(biāo)區(qū)域右下角坐標(biāo); sxl和syl為源區(qū)域左上角坐標(biāo); sx2和sy2為源區(qū)域右下角坐標(biāo)。 圖圖4-5 圖像坐標(biāo)系到程序序窗口坐標(biāo)系的變換圖像坐標(biāo)系到程序序窗口坐標(biāo)系的變換4
13、.7.4 繪制磚塊型圖像磚塊型圖像的尺寸通常較小,其繪制過(guò)程類似于在程序窗口“貼瓷磚”,即將窗口區(qū)域按磚塊型圖像的尺寸劃分為許多小方格,然后在相應(yīng)的方格內(nèi)繪制圖像,如圖4-6所示。圖圖4-6 4-6 磚塊型圖像磚塊型圖像例如推箱子游戲每關(guān)的地圖信息放入二維數(shù)組中,可以和網(wǎng)格對(duì)應(yīng)。其中存儲(chǔ)1代表pic1.jpg磚塊型圖像,2代表pic2.jpg磚塊型圖像,依次類推。存儲(chǔ)0代表此處不繪制磚塊型圖像。4.8 游戲角色開發(fā)游戲角色開發(fā)游戲角色也叫做游戲精靈(Spirte),是指游戲中可移動(dòng)的物體,主要包括玩家控制的角色、NPC(電腦控制角色,如怪物,敵機(jī)等)。在游戲中精靈通常那個(gè)可以活動(dòng)的,往往需要通
14、過(guò)連續(xù)地繪制多幅靜態(tài)圖像來(lái)表現(xiàn)其運(yùn)動(dòng)效果,如圖4-9所示。這里我們?cè)O(shè)計(jì)一個(gè)這里我們?cè)O(shè)計(jì)一個(gè)Sprite類,主要用來(lái)實(shí)現(xiàn)游戲里面的人物動(dòng)畫、移動(dòng)。使用類,主要用來(lái)實(shí)現(xiàn)游戲里面的人物動(dòng)畫、移動(dòng)。使用Sprite類可以讀取一個(gè)個(gè)小圖片,并且把它們按照一定的順序存儲(chǔ)在數(shù)組里面,類可以讀取一個(gè)個(gè)小圖片,并且把它們按照一定的順序存儲(chǔ)在數(shù)組里面,然后在屏幕上顯示出來(lái)其中的一個(gè)小圖片,如果連續(xù)的更換顯示的小圖片,則然后在屏幕上顯示出來(lái)其中的一個(gè)小圖片,如果連續(xù)的更換顯示的小圖片,則屏幕上表現(xiàn)為一個(gè)完整的動(dòng)畫效果。屏幕上表現(xiàn)為一個(gè)完整的動(dòng)畫效果。假如假如Sprite人物動(dòng)畫由人物動(dòng)畫由4幀狀態(tài)圖片(圖幀狀態(tài)圖片
15、(圖4-10所示),在繪制人物時(shí),根據(jù)所示),在繪制人物時(shí),根據(jù)mPlayID繪制相應(yīng)狀態(tài)的圖片繪制相應(yīng)狀態(tài)的圖片 下面的例子展示了如何顯示一個(gè)精靈走動(dòng)的動(dòng)畫,一個(gè)精靈從屏幕的左方往右走,顯示精靈走動(dòng)的SpritePanel類的代碼如下所示: 4.9 游戲聲音效果設(shè)定 Java提供了豐富的API用于對(duì)聲音進(jìn)行處理和播放,其中最常用的是一個(gè)使用數(shù)字化樣本文件工作的包,專門用于載入聲音文件并通過(guò)音頻混合器進(jìn)行播放。該包叫做javax.sound.sampled, 其所支持的聲音文件格式有以下幾種:AIFF, AU , WAV。 Java中播放聲音文件與顯示圖像文件一樣方便,同樣只需要先將聲音文件裝載進(jìn)來(lái),然后播放就行了
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024電腦監(jiān)控系統(tǒng)軟件銷售合同書模板
- 冀教版四年級(jí)下冊(cè)數(shù)學(xué)第八單元 小數(shù)加法和減法 測(cè)試卷附解析答案
- 2024年冷彎型鋼項(xiàng)目合作計(jì)劃書
- 中國(guó)LTCC行業(yè)投資前景分析及未來(lái)發(fā)展趨勢(shì)研究報(bào)告(智研咨詢發(fā)布)
- 鹽城師范學(xué)院《設(shè)計(jì)美學(xué)》2021-2022學(xué)年第一學(xué)期期末試卷
- 鹽城師范學(xué)院《嵌入式系統(tǒng)及應(yīng)用》2022-2023學(xué)年期末試卷
- 2024設(shè)備檢修工程合同
- 2024年美甲工具項(xiàng)目合作計(jì)劃書
- 綜合測(cè)試三(OSG)試題
- 醫(yī)療康復(fù)服務(wù)質(zhì)量評(píng)估合同
- 人工智能職業(yè)生涯規(guī)劃報(bào)告總結(jié)
- 主題班隊(duì)會(huì)教學(xué)設(shè)計(jì)
- 三年級(jí)上冊(cè)數(shù)學(xué)除法豎式計(jì)算300道帶答案
- 供應(yīng)室停水停電應(yīng)急預(yù)案
- JGJ72-2004 高層建筑巖土工程勘察規(guī)程
- 冷庫(kù)采購(gòu)安裝項(xiàng)目招標(biāo)文件
- 人品態(tài)度和能力
- 食堂副食品配送服務(wù)物資裝備計(jì)劃
- 銅礦的熱法冶煉與電法冶煉
- 客戶分析方案
- 股東合作協(xié)議(經(jīng)典版本)
評(píng)論
0/150
提交評(píng)論