【iOS-Cocos2d遊戲開發之五】【2】多觸點與觸屏事件詳解(單一監聽、事件分發)

來源:互聯網
上載者:User

那麼大概介紹了監聽事件後,那麼觸屏中最關心的就應該是多觸點啦;

 

 //-----擷取多點觸摸    NSSet *allTouches = [event allTouches];    UITouch *touchOne = [[allTouches allObjects]objectAtIndex:0];    UITouch *touchTwo = [[allTouches allObjects]objectAtIndex:1];    //...類推    

擷取多點狠簡單,那麼下面再將基本常用到的幾個判斷寫下:1-判斷使用者單擊還是雙擊(針對一個觸點)

 if([allTouches count]==1) {         UITouch *touchOne = [[allTouches allObjects]objectAtIndex:0];        switch ([touchOne tapCount]) {            case 1:                 //單擊                CCLOG(@"%@",@"單擊");                break;            case 2:                //雙擊                CCLOG(@"%@",@"雙擊");                break;        }    }    

2-判斷使用者兩個觸點之間是合攏還是分開(針對兩個觸點)

 

 if([allTouches count]==2) {         //適當修改處理,不能同時取,否則肯定一樣的啦(可以一個在began 一個在end)        UITouch *touchOne = [[allTouches allObjects]objectAtIndex:0];        UITouch *touchTwo = [[allTouches allObjects]objectAtIndex:1];        CGFloat *disFirst  =[self distance:[touchOne locationInView:[self view]]                                 todistance:[touchTwo locationInView:[self view]]];                UITouch *touchOne = [[allTouches allObjects]objectAtIndex:0];        UITouch *touchTwo = [[allTouches allObjects]objectAtIndex:1];        CGFloat *disFinal  =[self distance:[touchOne locationInView:[self view]]                                todistance:[touchTwo locationInView:[self view]]];        if (disFirst>disFinal) {            CCLOG(@"%@",@"合攏");        }else{            CCLOG(@"%@",@"分開");        }    }    

 

這裡我就粗略的寫在一起,判定兩個觸點是否合攏其實就是使用者剛觸屏時記錄兩點之間的距離記做disFirst,然後在兩個觸點離開螢幕(或者移動事件中)的時候計算

當前的兩個觸點的距離disFinal,那麼最後根據disFirst與disFinal距離關係就能知道是合攏還是分開;

(CCLOG 是cocos2d封裝的列印方法,此種列印在編譯發布正式遊戲程式的時候是不會編譯到程式中的,但是NSLOG會一直存在。要注意。)

 

最後給出兩個函數,用於計算不同方式監聽的函數中擷取(轉換)座標的,因為cocos2d是openGL進行搭建的架構,所以需要座標轉換;

 

 +(CGPoint) locationFromTouches:(NSSet*)touches    {        return [self locationFromTouch:[touches anyObject]];    }    +(CGPoint) locationFromTouch:(UITouch*)touch    {        CGPoint touchLocation = [touch locationInView: [touch view]];        return [[CCDirector sharedDirector] convertToGL:touchLocation];    }    

兩個方法一看就能看出區別,一個是UITouch的,一個是NSSet,一個是單一監聽,一個是分發監聽;

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.