cocos2d-x游戏实例(12)-实时拖动主角移动
小滿(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);
這個實現起來比上一篇的問題要簡單,但是我們要實現一個小算法,就是,我們檢測我們的觸電在主角的矩形范圍內的一個點,那我們的觸點不一定在主角的錨點上,這樣我們不能直接用觸點直接設置主角的位置,我們需要處理一下,見下圖
如圖p點是我們的觸點,a點是我們的錨點,我們只要滿足一下公式:
Px?-?Ax?=?dx,Py?-?Ay?=?dy就可以了。
首先來看ccTouchesBegan的實現:
首先還是獲得觸點,然后我們就要獲得主角位置,和上次的程序一樣,主角還是綁定在地圖上的,所以我們要獲得主角的絕對坐標,然后判斷觸點是否在主角這個矩形范圍內,如果在范圍內,我們把索引值設置為-5,-5表示起始點有效,-1表示起始點無效,然后我們就通過剛才那個公式獲得dx和dy(也就是xdelta,ydelta)。
再來看ccTouchesMoved的實現:
如果索引值為-5,那表示我們就可以控制主角了,然后我們要判斷觸點是否在屏幕范圍內,如果在屏幕范圍內,再判斷這個位置是否和主角當前位置相同,如果不同才會設置主角位置,這里要說到的是我們獲得上一個位置的方法,當然,你也可以通過一個變量來控制,這里介紹通過計算得到的方法,首先通過主角的getposition方法獲得的坐標只是主角相對于地圖的坐標,我們加上地圖的橫縱坐標來獲得主角的絕對坐標,然后再通過Px?-?Ax?=?dx,Py?-?Ay?=?dy公式獲得上一個觸點的位置,最后設置主角位置,注意首先還是通過Px?-?Ax?=?dx,Py?-?Ay?=?dy公式獲得錨點應該移動到的位置,然后再減去地圖的位置獲得主角和地圖的相對坐標
再來看ccTouchesEnded的實現:
很簡單,就是如果索引值為-5時重新設置為-1的“未激活”狀態。
如有錯誤之處,希望大家多多指正
下一篇繼續游戲實例
總結
以上是生活随笔為你收集整理的cocos2d-x游戏实例(12)-实时拖动主角移动的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: cocos2d-x游戏实例(11)-触屏
- 下一篇: cocos2d-x游戏实例(13)-简易