cocos2d-x游戏实例(11)-触屏主角移动轨迹
小滿(bill man)個人原創(chuàng),歡迎轉(zhuǎn)載,轉(zhuǎn)載請注明地址,小滿(bill man)的專欄地址http://blog.csdn.net/bill_man
最近在玩間諜鼠這個游戲,其中有一個觸屏操作主角移動的方式,就是手指觸摸屏幕的軌跡會被記錄下來,然后主角順著軌跡移動,其實這種操作在很多游戲中都有應(yīng)用,很適合觸屏操作。本篇文章就寫一個簡單的類似例子在cocos2d-x上的實現(xiàn)。
實現(xiàn)思路很簡單,首先需要重寫以下幾個函數(shù)來記錄觸屏軌跡:
virtual?void?ccTouchesBegan(CCSet?*pTouches,?CCEvent?*pEvent);
virtual?void?ccTouchesMoved(CCSet?*pTouches,?CCEvent?*pEvent);
virtual?void?ccTouchesEnded(CCSet?*pTouches,?CCEvent?*pEvent);
另外我們需要一個CCMutableArray來記錄我們的軌跡,我們通過如下方式定義:
CCMutableArray<MyPoint?*>?*?path;
其中MyPoint是我們自己定義的一個CCPoint,為什么需要我們自己定義呢?是因為CCMutableArray要求類型必須具備retain函數(shù),我們自己定義一個MyPoint是為了讓它繼承retain函數(shù)。MyPoint的定義如下:
很簡單,就是有x,y,并把它繼承于CCNode就可以了。
下面首先看ccTouchesBegan函數(shù):
首先獲得坐標(biāo)點,其中的一系列轉(zhuǎn)換已經(jīng)不用多說了,然后我們要獲得主角的位置,由于我還是用的A星算法那個場景,所以主角是屬于地圖的,所以我們要獲得主角的絕對坐標(biāo),就直接加上地圖坐標(biāo)就是主角在屏幕上的絕對坐標(biāo),然后我們判斷我們的起始拖動點是否在主角這個矩形范圍內(nèi),如果在主角這個范圍內(nèi)那么首先清空path數(shù)組,然后把這個點加入到path中,并把我們的索引值stepindex設(shè)為-5,表示后續(xù)的拖動有效,stepindex的初始值為-1,-1表示沒有接收到指令,大于0的值就是主角移動
再看ccTouchesMoved函數(shù):
如果stepindex為-5,表示后續(xù)的拖動有效,我們繼續(xù)往我們的path里加入點,要注意要檢測以下點是否出屏幕范圍,另外還要檢測是否合上一個點不同,不同的點我們才會記錄
再看ccTouchesEnded函數(shù):
當(dāng)觸屏結(jié)束并且stepindex為-5,表示后續(xù)的拖動有效時,stepindex設(shè)為0,表示主角可以移動
在update中每幀更新主角位置,即遍歷一遍path,記住設(shè)置主角位置時要主角和地圖的相對坐標(biāo),當(dāng)path遍歷完成stepindex設(shè)為-1,這樣記錄觸屏軌跡并使主角按此軌跡移動的功能就實現(xiàn)了
如有錯誤之處,希望大家多多指正
下一篇繼續(xù)游戲?qū)嵗?/p> 超強干貨來襲 云風(fēng)專訪:近40年碼齡,通宵達旦的技術(shù)人生
總結(jié)
以上是生活随笔為你收集整理的cocos2d-x游戏实例(11)-触屏主角移动轨迹的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: cocos2d-x游戏实例(10)-塔防
- 下一篇: cocos2d-x游戏实例(12)-实时