【iOS-Coocos 2 dゲーム開発の5】【2】マルチコンタクトとタッチパネルイベントの詳細(単一モニター、イベント配信)


当駅の文章は全部 李華明ひとみ オリジナル、転載は必ず明確なところに明記してください.
「黒米GameDev街区」から転載しました. 原文のリンク: http://www.himigame.com/iphone-cocos2d/450.html
 
大体モニター事件を紹介しましたが、タッチパネルの中で一番関心があるのは多接点です.
 

  
  
  
  
  1. //-----    
  2. NSSet *allTouches = [event allTouches];   
  3. UITouch *touchOne = [[allTouches allObjects]objectAtIndex:0];   
  4. UITouch *touchTwo = [[allTouches allObjects]objectAtIndex:1];   
  5. //...    
マルチポイントを取得するのは簡単です.次に、基本的によく使われているいくつかの判定を記入します.1-ユーザーがクリックするかダブルクリックするかを判断します.

  
  
  
  
  1. if([allTouches count]==1) {    
  2.     UITouch *touchOne = [[allTouches allObjects]objectAtIndex:0];   
  3.     switch ([touchOne tapCount]) {   
  4.         case 1:   
  5.              //    
  6.             CCLOG(@"%@",@" ");   
  7.             break;   
  8.         case 2:   
  9.             //    
  10.             CCLOG(@"%@",@" ");   
  11.             break;   
  12.     }   
  13. }   
2-ユーザの二つの接点の間が閉じているかそれとも離れているかを判断する(2つの接点に対して)
 

  
  
  
  
  1. if([allTouches count]==2) {    
  2.     // , , ( began  end)   
  3.     UITouch *touchOne = [[allTouches allObjects]objectAtIndex:0];   
  4.     UITouch *touchTwo = [[allTouches allObjects]objectAtIndex:1];   
  5.     CGFloat *disFirst  =[self distance:[touchOne locationInView:[self view]]    
  6.                             todistance:[touchTwo locationInView:[self view]]];   
  7.        
  8.     UITouch *touchOne = [[allTouches allObjects]objectAtIndex:0];   
  9.     UITouch *touchTwo = [[allTouches allObjects]objectAtIndex:1];   
  10.     CGFloat *disFinal  =[self distance:[touchOne locationInView:[self view]]   
  11.                             todistance:[touchTwo locationInView:[self view]]];   
  12.     if (disFirst>disFinal) {   
  13.         CCLOG(@"%@",@" ");   
  14.     }else{   
  15.         CCLOG(@"%@",@" ");   
  16.     }   
  17. }   
 
ここで大雑把に書きます.二つの接点がくっついているかどうかを判定します.つまりユーザがタッチパネルに触れた時に2点の距離を記録してdisFirstを作ります.そして二つの接点がスクリーンから離れている時に計算します.
現在の二つの接点の距離はdis Finalで、最後にdis Firstとdis Finalの距離関係によって、閉じているかそれとも離れているかが分かります.
(CCLOGはcocococos 2 dパッケージの印刷方法です.このプリントは正式なゲームプログラムをコンパイルして発表する時にはプログラムにコンパイルされませんが、NSLOGはずっと存在します.注意してください.)
 
最後に2つの関数を与え、異なる方式で傍受した関数の中から座標を取得(変換)するために、cocococos 2 dはopenGLで構築されたフレームであるため、座標変換が必要である.
 

  
  
  
  
  1. +(CGPoint) locationFromTouches:(NSSet*)touches   
  2. {   
  3.     return [self locationFromTouch:[touches anyObject]];   
  4. }   
  5. +(CGPoint) locationFromTouch:(UITouch*)touch   
  6. {   
  7.     CGPoint touchLocation = [touch locationInView: [touch view]];   
  8.     return [[CCDirector sharedDirector] convertToGL:touchLocation];   
  9. }   
二つの方法は一見して区別が分かります.一つはUICTouchで、一つはNSSetで、一つは単一傍受で、もう一つは配信傍受です.
 
ok、本章はここまでです~~(来週は閉鎖開発に入ります.食べて寝ても会社にいます.ゴホン、私のドラえもんのパンツを持っています.ワハハ~)