【原】cocos2d-x開發筆記:多點觸控的使用

來源:互聯網
上載者:User

在項目開發中,我們做的大地圖,一個手指頭按下滑動可以拖動大地圖,兩個手指頭按下張開或者閉合,可以放大和縮小地圖

在實現這個功能的時候,需要使用到cocos2d-x的多點觸控功能。

多點觸控事件,並不是說你按下了兩個手指,執行ccTouchesMoved的時候,pTouches的count為2,這樣如果單純的判斷函數傳入的參數,實現起來會比較困難。

我用一種方式實現了,感覺還是比較簡單明了的,拿出來分享一下

cocos2d-x版本:cocos2d-x 2.2.0

目標平台:ios

1、首先在AppController.mm中設定開啟多點觸控

[__glView setMultipleTouchEnabled:YES];

2、在HelloWorldScene.cpp中得init函數中開啟響應觸摸事件

setTouchEnabled(true);

3、重寫父類的三個函數

virtual void ccTouchesBegan(cocos2d::CCSet *pTouches, cocos2d::CCEvent *pEvent);virtual void ccTouchesMoved(cocos2d::CCSet *pTouches, cocos2d::CCEvent *pEvent);virtual void ccTouchesEnded(cocos2d::CCSet *pTouches, cocos2d::CCEvent *pEvent);

4、在類標頭檔中定義一個CCArray,用來儲存CCTouch對象的指標

cocos2d::CCArray* m_touchPoints;

5、在建構函式和解構函式中對CCArray進行初始化retain和release

HelloWorld::HelloWorld(){    m_touchPoints = CCArray::create();    m_touchPoints->retain();}HelloWorld::~HelloWorld()
{
    m_touchPoints->release();
    m_touchPoints = NULL;
}

6、當一個手指按下以後,不論是剛按下的時候,調用的ccTouchesBegan,還是滑動的過程中調用的ccTouchesMoved,還是抬起的時候調用ccTouchesEnded,函數的參數都是同一個CCTouch對象。

所以,我們在執行ccTouchesBegan函數的時候,把該對象加入到我們定義的CCArray中,在ccTouchesMoved函數中判斷我們自訂的數組的長度,如果是1,就執行拖動地圖的動作,如果是2,就執行縮放的動作,更多的動作也都可以靈活的增加

在ccTouchesEnded的時候,在CCArray中移除掉當前的這個CCTouch對象。

void HelloWorld::ccTouchesBegan(cocos2d::CCSet *pTouches, cocos2d::CCEvent *pEvent){    //將CCTouch對象加入數組    int count = pTouches->count();    CCSetIterator iter = pTouches->begin();    for (int i=0; i<count; i++) {        CCTouch* pTouch = (CCTouch*)(*iter++);        m_touchPoints->addObject(pTouch);    }}void HelloWorld::ccTouchesMoved(cocos2d::CCSet *pTouches, cocos2d::CCEvent *pEvent){    if (m_touchPoints->count() == 1)//移動    {        CCLog("move");    }    else if (m_touchPoints->count() == 2)//縮放    {        CCLog("scale");    }}void HelloWorld::ccTouchesEnded(cocos2d::CCSet *pTouches, cocos2d::CCEvent *pEvent){    //將CCTouch對象從數組中移除    int count = pTouches->count();    CCSetIterator iter = pTouches->begin();    for (int i=0; i<count; i++) {        m_touchPoints->removeObject(*iter++);    }}

 

本人才疏學淺,如果有哪裡寫的不對的地方,還請指標,我馬上修改!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.