cocos2d-x遊戲實例(12)-實時拖動主角移動

小滿(bill man)個人原創,歡迎轉載,轉載請註明地址,小滿(bill man)的專欄地址http://blog.csdn.net/bill_man

上一篇講解了記錄拖動的路徑並使主角按照此路徑移動的cocos2d-x實現。這篇講解另一個操作方式,這種方式在縱版射擊遊戲中有不少的實現,就是觸屏拖動主角實時移動,也就是說沒有上一節那個記錄路徑然後主角再移動的過程,主角是隨你的手指移動的,之後的例子裏我也將完整的實現一個簡單的縱版射擊遊戲,就採用這種操作方式。

和上一篇一樣,我們也要實現如下三個函數:

virtualvoidccTouchesBegan(CCSet*pTouches,CCEvent*pEvent);

virtualvoidccTouchesMoved(CCSet*pTouches,CCEvent*pEvent);

virtualvoidccTouchesEnded(CCSet*pTouches,CCEvent*pEvent);

這個實現起來比上一篇的問題要簡單,但是我們要實現一個小算法,就是,我們檢測我們的觸電在主角的矩形範圍內的一個點,那我們的觸點不一定在主角的錨點上,這樣我們不能直接用觸點直接設置主角的位置,我們需要處理一下,見下圖


如圖p點是我們的觸點,a點是我們的錨點,我們只要滿足一下公式:

Px-Ax=dxPy-Ay=dy就可以了。

首先來看ccTouchesBegan的實現:


首先還是獲得觸點,然後我們就要獲得主角位置,和上次的程序一樣,主角還是綁定在地圖上的,所以我們要獲得主角的絕對座標,然後判斷觸點是否在主角這個矩形範圍內,如果在範圍內,我們把索引值設置爲-5-5表示起始點有效,-1表示起始點無效,然後我們就通過剛纔那個公式獲得dxdy(也就是xdeltaydelta)。

再來看ccTouchesMoved的實現:


如果索引值爲-5,那表示我們就可以控制主角了,然後我們要判斷觸點是否在屏幕範圍內,如果在屏幕範圍內,再判斷這個位置是否和主角當前位置相同,如果不同纔會設置主角位置,這裏要說到的是我們獲得上一個位置的方法,當然,你也可以通過一個變量來控制,這裏介紹通過計算得到的方法,首先通過主角的getposition方法獲得的座標只是主角相對於地圖的座標,我們加上地圖的橫縱座標來獲得主角的絕對座標,然後再通過Px-Ax=dxPy-Ay=dy公式獲得上一個觸點的位置,最後設置主角位置,注意首先還是通過Px-Ax=dxPy-Ay=dy公式獲得錨點應該移動到的位置,然後再減去地圖的位置獲得主角和地圖的相對座標

再來看ccTouchesEnded的實現:


很簡單,就是如果索引值爲-5時重新設置爲-1的「未激活」狀態。

如有錯誤之處,希望大家多多指正

下一篇繼續遊戲實例