ANDROID游戲碰撞原理.doc_第1頁(yè)
ANDROID游戲碰撞原理.doc_第2頁(yè)
ANDROID游戲碰撞原理.doc_第3頁(yè)
ANDROID游戲碰撞原理.doc_第4頁(yè)
ANDROID游戲碰撞原理.doc_第5頁(yè)
已閱讀5頁(yè),還剩5頁(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)介

ANDROID游戲碰撞原理游戲碰撞的大致可以分為這幾種類1.主角與邊界的碰撞,限制主角不能走出手機(jī)屏幕外。2.主角與物理層的碰撞,與地圖中的房子桌子 椅子等等。3.主角與游戲人物之間的碰撞,這里指NPC等。4.主角與腳本框發(fā)生的碰撞,例如走進(jìn)房間出線一段劇情對(duì)話等等。由此可見(jiàn)游戲中的碰撞主要是可以分為1.點(diǎn)與矩形之間的碰撞2.矩形與矩形之間的碰撞3.圓形與圓形之間的碰撞4.圓形與矩形之間的碰撞 今天我主要介紹一下以上中最特殊的一個(gè)碰撞方式主角與物理層之間的碰撞。如 圖所示:每個(gè)小方塊中儲(chǔ)存著地圖塊的信息,在二位數(shù)組中如果為-1表示屬于物理層不可通過(guò),其它均可通過(guò)。也就是說(shuō)-1 這個(gè)地圖塊的位置繪制這物理層的東西。主角在行走的時(shí)候通過(guò)自己的坐標(biāo)原點(diǎn)計(jì)算出自己在二位數(shù)組中的索引,然后根據(jù)索引找到數(shù)組中的數(shù)值判斷自己是否可以通過(guò)。繪制地圖根據(jù)地圖編輯器生成出來(lái)的數(shù)組,一定是先繪制背景層地圖,然后在繪制第物理地圖等等。物理碰撞層生成的數(shù)組是不用繪制的,只需要每次主角移動(dòng)坐標(biāo)的時(shí)候檢測(cè)是否與物理層發(fā)生碰撞.背景底層物理層碰撞層說(shuō)到這里可能有些朋友會(huì)問(wèn)為什么第一層要和第二層分開(kāi)?這兩層不能合二為一嗎?如圖所示:用兩個(gè)圖層主要是為了解決物理層圖片不能全部顯示,好比下面這個(gè)荷花,它的繪制區(qū)域在矩形中周圍白色的則是透明的區(qū)域,所以我們需要先繪制地圖背景層在繪制物理層這樣就可以遮蓋透明區(qū)域。代碼的實(shí)現(xiàn)方式首先我們需要利用onKeyDown()和onKeyUp()方法確定當(dāng)前手機(jī)那個(gè)按鍵被按下,根據(jù)按鍵信息更新人物動(dòng)畫,檢測(cè)是否碰撞。mIskeyDown = true 表示 按下方向鍵下mIskeyLeft = true 表示 按下方向鍵左mIskeyRight = true 表示 按下方向鍵右mIskeyUp = true 表示 按下方向鍵上mHeroPosX 表示人物的X坐標(biāo)mHeroPosY 表示人物的Y坐標(biāo)mAnimationState 表示播放動(dòng)畫的ID 因?yàn)槿宋镄凶哂?組方向的動(dòng)畫 所以 mAnimationState 可以修改播放那組動(dòng)畫view plain/*根據(jù)按鍵更新顯示動(dòng)畫*/*在碰撞數(shù)組中尋找看自己是否與地圖物理層發(fā)生碰撞*/if(mIskeyDown)mAnimationState=ANIM_DOWN;mHeroPosY+=HERO_STEP;elseif(mIskeyLeft)mAnimationState=ANIM_LEFT;mHeroPosX-=HERO_STEP;elseif(mIskeyRight)mAnimationState=ANIM_RIGHT;mHeroPosX+=HERO_STEP;elseif(mIskeyUp)mAnimationState=ANIM_UP;mHeroPosY-=HERO_STEP;主角每次移動(dòng)的時(shí)候我們還需要檢測(cè)一下他的X Y坐標(biāo)是否超出屏幕 如果超出屏幕則保持他目前的位置不變view plain/*檢測(cè)人物是否出屏*/isBorderCollision=false;if(mHeroPosX=mScreenWidth)mHeroPosX=mScreenWidth;isBorderCollision=true;if(mHeroPosY=mScreenHeight)mHeroPosY=mScreenHeight;isBorderCollision=true;主角應(yīng)該有兩個(gè)坐標(biāo)點(diǎn) 如圖所示: 為什么主角要有2個(gè)坐標(biāo)點(diǎn)的原因是 左上角的00點(diǎn)程序是不能進(jìn)行邏輯判斷的比如檢測(cè)主角向右移動(dòng)走超出屏幕,因?yàn)樽鴺?biāo)點(diǎn)在左上角所以整個(gè)圖片都走出屏幕以后程序才能判斷出人物出屏,所以不能用左上角的點(diǎn)來(lái)作為主角的坐標(biāo)原點(diǎn),須要用下面的點(diǎn)來(lái)計(jì)算人物的邏輯坐標(biāo)我的建議是我們只計(jì)算下面這個(gè)點(diǎn)然后根據(jù)這個(gè)點(diǎn)在算出來(lái)圖片左上角的原點(diǎn),然后在通知圖像繪制。判斷碰撞檢測(cè)mCollision這個(gè)二維數(shù)是地圖編輯器生成出來(lái)的,用來(lái)組保存碰撞層的所有信息 -1表示不能通過(guò)mHeroIndexX 、mHeroIndexY 代表當(dāng)前人物在二位數(shù)組中的索引位置,根據(jù)索引找到二維數(shù)組中的值判斷是否碰撞mBackHeroPosX、mBackHeroPosY 備份發(fā)生碰撞前人物的坐標(biāo)一旦碰撞以后將使用備份的坐標(biāo)避免人物碰撞后不能返回。view plainif(mCollisionmHeroIndexYmHeroIndexX=-1)mHeroPosX=mBackHeroPosX;mHeroPosY=mBackHeroPos

溫馨提示

  • 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)論