日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

cocos2d-x游戏实例(11)-触屏主角移动轨迹

發(fā)布時間:2024/4/11 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 cocos2d-x游戏实例(11)-触屏主角移动轨迹 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

小滿(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。