cocos2d-x游戏实例(4)-地图碰撞
小滿(bill man)個人原創(chuàng),歡迎轉(zhuǎn)載,轉(zhuǎn)載請注明地址,小滿(bill man)的專欄地址http://blog.csdn.net/bill_man
這篇繼續(xù)上一篇的內(nèi)容,繼續(xù)地圖碰撞,上一篇我們得到了我們所處位置的地圖索引,這樣我們就可以知道我們要控制的角色的位置對應(yīng)的地圖索引值了,那么如何知道我們這塊地圖是可以去的還是碰撞呢,這里我介紹兩種辦法
1.分層法
????我覺得這個更適合45度角的地圖,因為如果使用后一種辦法,把所有的圖素寬放在一層里的話,會有遮擋這個問題的,當然不是說第二種不能只不過我們把地圖的碰撞圖素放在一層里我們會把相應(yīng)的表現(xiàn)圖素放在新的一層里,所以還是要分層。
首先看第一種情況的地圖,如下圖
就是新建一層Tree層,把所有的樹(這里不能碰撞的圖素),grass層鋪滿草,這里人可以在草中移動,檢測碰撞的代碼如下:
首先通過convertto2d函數(shù)獲得主角在地圖上的索引值,這里為了方便,我把索引值也做成CCPoint的類型了,但是事實上,它并不是一個CCPoint,然后獲得Tree層,然后根據(jù)索引及tileAt函數(shù)獲得在該位置的圖素,如果他不為空,則證明這個位置是不可碰撞的,那么我們就回滾剛才的移動位置操作,并停止該位置的移動即可。這種方法解決起來相對簡單。
2.地圖GID及屬性法
這種方法應(yīng)該是更為“正統(tǒng)”的,首先在地圖上建一層,如下
只是建一層,然后我們在圖素上新建屬性,我們建一個叫“conflict”屬性,并為他設(shè)定不同的值即可。
我們把不可碰得設(shè)為1,把可碰的設(shè)為0。代碼如下:
我們首先或取GID,其實我們可以根據(jù)gid直接判斷哪些可碰哪些不能通過。但是為了演示如何獲得屬性,我們還有之后的代碼,通過gid獲得屬性,屬性是一組鍵值對,然后獲得conflict值,這樣我們就可以判斷了
如有錯誤之處,希望大家多多指正
下一篇繼續(xù)游戲?qū)嵗?/p>
總結(jié)
以上是生活随笔為你收集整理的cocos2d-x游戏实例(4)-地图碰撞的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: cocos2d-x游戏实例(3)-获得地
- 下一篇: cocos2d-x游戏实例(6)-A星算