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