第七章 游戲中的沖突檢測(cè)_第1頁(yè)
第七章 游戲中的沖突檢測(cè)_第2頁(yè)
第七章 游戲中的沖突檢測(cè)_第3頁(yè)
第七章 游戲中的沖突檢測(cè)_第4頁(yè)
第七章 游戲中的沖突檢測(cè)_第5頁(yè)
已閱讀5頁(yè),還剩20頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

Flash游戲編程

肖剛閩江學(xué)院電子系計(jì)算機(jī)教研室Email:fuzhou3721@163.com第七章游戲中的沖突檢測(cè)教學(xué)提要沖突檢測(cè)的方法介紹基于位圖的沖突檢測(cè)實(shí)例“戰(zhàn)場(chǎng)生存記”中的沖突檢測(cè)認(rèn)識(shí)Flash游戲中的三種沖突檢測(cè)算法及其邊界條件概要沖突檢測(cè)是指檢測(cè)兩個(gè)對(duì)象是否有重疊的部分或者某個(gè)對(duì)象是否覆蓋了某個(gè)點(diǎn)。許多游戲必須使用到?jīng)_突檢測(cè),例如:格斗游戲,兩個(gè)對(duì)戰(zhàn)角色是否相碰是出招是否有效的前提。臺(tái)球游戲,如果臺(tái)球在運(yùn)動(dòng)的過(guò)程中相碰,那么它應(yīng)該有動(dòng)量傳遞。正確地進(jìn)行沖突檢測(cè),是這些游戲設(shè)計(jì)成敗的關(guān)鍵點(diǎn)。1沖突檢測(cè)的方法介紹ActionScript給我們提供了三種沖突檢測(cè)的方法。列表如下:名稱描述提供者h(yuǎn)itTestObject(目標(biāo)顯示對(duì)象)檢測(cè)兩個(gè)對(duì)象是否有重疊的部分DisplayObjecthitTestPoint(x,y[,形狀標(biāo)記](méi))檢測(cè)本對(duì)象是否覆蓋了某個(gè)點(diǎn)DisplayObjecthitTest(參數(shù)列表)檢測(cè)兩個(gè)BitmapData是否有重疊的部分BitmapData1.1檢測(cè)兩個(gè)顯示對(duì)象是否有重疊的部分方法名稱:hitTestObject語(yǔ)法:源顯示對(duì)象.hitTestObject(目標(biāo)顯示對(duì)象);提供者:DisplayObject。凡是DisplayObject子類的類實(shí)例,都能夠使用本方法。如MovieClip類。作用:使用顯示對(duì)象的hitTestObject方法可以檢測(cè)兩個(gè)顯示對(duì)象是否有重疊的部分。它的返回值true表示有重疊,false表示沒(méi)有重疊。1.1.1邊界條件但需要注意的是,hitTestObject函數(shù)以顯示對(duì)象的外接矩形框作為評(píng)判是否重疊的依據(jù)。兩個(gè)顯示對(duì)象圖像部分重疊當(dāng)然好理解,但是如下圖中的兩個(gè)影片剪輯(矩形框是外接矩形區(qū)域示意圖),在視覺上雖然沒(méi)有重疊,但是由于它們的矩形框區(qū)域有交叉的部分,所以hitTestObject的返回值為true。1.1.2旋轉(zhuǎn)中的邊界條件還有一個(gè)細(xì)節(jié)需要注意,如果影片剪輯在編輯過(guò)程中,或者是運(yùn)行過(guò)程中有旋轉(zhuǎn),那么此時(shí)的情況會(huì)如何呢?例如上圖中的五角星,如果旋轉(zhuǎn)了一個(gè)某個(gè)角度,如下圖所示:那么,進(jìn)行沖突檢測(cè)的時(shí)候,采用剪輯原有的方框(實(shí)線),還是大虛線方框,抑或是小虛線方框作為沖突檢測(cè)的邊界條件?

實(shí)驗(yàn)結(jié)果表明,F(xiàn)lash采用的是大虛線方框作為沖突檢測(cè)的邊界條件。

1.2檢測(cè)顯示對(duì)象與某一點(diǎn)是否重疊方法名稱:hitTestPoint語(yǔ)法:顯示對(duì)象.hitTestPoint(x,y[,形狀標(biāo)記](méi));提供者:DisplayObject。凡是DisplayObject子類的類實(shí)例,都能夠使用本方法。如MovieClip類。作用:使用hitTestPoint方法可檢測(cè)顯示對(duì)象與某個(gè)坐標(biāo)點(diǎn)是否重疊。形狀標(biāo)記為false(默認(rèn))時(shí),使用顯示對(duì)象的外接矩形框作為判斷的依據(jù),為true時(shí),使用顯示對(duì)象的實(shí)體像素作為判斷的依據(jù)與坐標(biāo)點(diǎn)進(jìn)行檢測(cè)。1.2.1形狀標(biāo)記如下圖所示,五角星剪輯和三個(gè)坐標(biāo)點(diǎn)A、B、C在形狀標(biāo)記不同取值下hitTestPoint的返回值如下表:形狀標(biāo)記truefalseAfalsetrueBtruetrueCfalsefalse1.2.2簡(jiǎn)化的沖突檢測(cè)大多數(shù)游戲中,將尺寸較小的剪輯簡(jiǎn)化為點(diǎn),用hitTestPoint檢測(cè)它與某個(gè)對(duì)象是否沖突。例如戰(zhàn)斗機(jī)游戲中,所有的子彈都被簡(jiǎn)化成質(zhì)點(diǎn)。這顯著提高了游戲的性能,也使爆炸點(diǎn)更貼近戰(zhàn)斗機(jī)的輪廓。示例游戲“戰(zhàn)場(chǎng)生存記”中就采用點(diǎn)探測(cè)的方式進(jìn)行沖突檢測(cè)。1.3對(duì)位圖數(shù)據(jù)進(jìn)行像素級(jí)別的沖突檢測(cè)方法名稱:hitTest語(yǔ)法:BitmapData對(duì)象.hitTest(參數(shù)列表);提供者:BitmapData作用:使用BitmapData的hitTest方法可以檢測(cè)BitmapData與另一個(gè)Point、Rectangle、Bitmap或者BitmapData是否有重疊。它以透明度域值作為有效像素的根據(jù),低于域值的是無(wú)效像素,等于或者高于域值的是有效像素,如果兩個(gè)對(duì)象比較的區(qū)域內(nèi)有重疊的有效像素,則返回true,否則返回false。1.3.1hitTest的使用技巧思路hitTest方法給我們提供了一個(gè)實(shí)現(xiàn)兩個(gè)可視對(duì)象實(shí)體沖突檢測(cè)的思路。將游戲中需要進(jìn)行嚴(yán)格的實(shí)體沖突檢測(cè)的對(duì)象制作成帶透明通道的位圖,導(dǎo)入Flash中使用。通過(guò)BitmapData的draw方法從現(xiàn)有的影片剪輯中獲取位圖快照,然后再使用hitTest方法進(jìn)行沖突檢測(cè)。好處:實(shí)現(xiàn)真正的與視覺完全一致的沖突檢測(cè)結(jié)果獲取動(dòng)畫的位圖快照,從而在兩個(gè)動(dòng)畫之間進(jìn)行基于位圖的沖突檢測(cè),大大提高了沖突檢測(cè)的真實(shí)性。缺點(diǎn)是運(yùn)行效率降低了。1.3.2hitTest方法的參數(shù)hitTest有5個(gè)參數(shù),按順序?yàn)椋篺irstPoint(Point):設(shè)定源BitmapData左上角在比較空間中的位置。firstAlphaThreshold(uint):設(shè)定源BitmapData對(duì)象被視為不透明的最小Alpha通道值,取值0~255。Alpha值小于這個(gè)值的像素不參與重疊計(jì)算。secondObject(Object):目標(biāo)對(duì)象,目標(biāo)對(duì)象可以是Rectangle、Point、Bitmap或BitmapData對(duì)象。secondBitmapDataPoint(Point):可選參數(shù),當(dāng)目標(biāo)對(duì)象為BitmapData對(duì)象時(shí)才使用。表示目標(biāo)對(duì)象左上角在比較空間中的位置。secondAlphaThreshold(uint):可選參數(shù),設(shè)定目標(biāo)BitmapData對(duì)象被視為不透明的最小Alpha通道值。2基于位圖的沖突檢測(cè)實(shí)例演示程序:小心觸電你扮演一個(gè)小人物,要穿過(guò)到處都是高壓電的區(qū)域,你不能碰到任何帶電的東西,到達(dá)目的地即可獲勝。程序分析:很明顯,這個(gè)游戲的關(guān)鍵技術(shù)就是如何精確判斷小人與眾多各種剪輯對(duì)象之間是否有重疊的部分,如果有,則表示觸電,游戲失敗,如果碰到游戲結(jié)束所在位置的顯示對(duì)象,表示游戲勝利。我們單獨(dú)抽出沖突檢測(cè)部分進(jìn)行講解。我們要完成的工作是用鼠標(biāo)引導(dǎo)小人運(yùn)動(dòng),用一個(gè)影片剪輯模擬帶電物體,如果帶電物體碰到小人,就輸出一條信息。2.1設(shè)計(jì)步驟新建Flash文檔(ActionScript3.0),設(shè)置文檔的大小為:550*200,幀頻率為40。設(shè)計(jì)兩個(gè)影片剪輯,一個(gè)是小人,一個(gè)是有三條天線的帶電體,是個(gè)會(huì)旋轉(zhuǎn)的動(dòng)畫,如下圖所示:注意兩個(gè)剪輯的中心位置都必須定義在左上角,并且要在剪輯內(nèi)添加一個(gè)透明的方塊,用來(lái)覆蓋動(dòng)畫中可能接觸到的區(qū)域。如天線剪輯內(nèi)就有一個(gè)這樣的方塊。這樣做的目的是為了在任意時(shí)刻用draw方法獲得剪輯的快照時(shí)不會(huì)丟失部分動(dòng)畫內(nèi)容。2.2設(shè)計(jì)步驟將這兩個(gè)剪輯都布置在舞臺(tái)上,設(shè)置小人的實(shí)例名稱為boy。進(jìn)入boy剪輯內(nèi)部,在其第一幀輸入如下代碼:startDrag(true);Mouse.hide();

這樣運(yùn)行中這個(gè)小人將會(huì)跟隨鼠標(biāo)移動(dòng),并且鼠標(biāo)指針被隱藏了。2.3設(shè)計(jì)步驟進(jìn)入天線剪輯,在其第一幀輸入以下代碼:varenemy:MovieClip=MovieClip(root).boy;addEventListener(Event.ENTER_FRAME,bHitTest);functionbHitTest(target:Event){ varbd1:BitmapData=newBitmapData(width,height,true,0x00000000); varbd2:BitmapData=newBitmapData(enemy.width,enemy.height,true,0x000000

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論