那麼大概介紹了監聽事件後,那麼觸屏中最關心的就應該是多觸點啦;
//-----擷取多點觸摸 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,一個是單一監聽,一個是分發監聽;