日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
詳解Cocos2d CCLayer中Touch使用方法

Cocos2d CCLayerTouch使用方法是本文要介紹的內(nèi)容,Cocos2d作為一個(gè)開源的2D游戲引擎,最初是用python語言實(shí)現(xiàn),mac app開發(fā)流行后,提供了一個(gè)Objective-C的版本。采用Cocos2d框架開發(fā)iphone游戲,極大提高了開發(fā)的速度。簡(jiǎn)單介紹參見百度百科 ,cocos2d官網(wǎng)。

Cocos2d提供了兩種touch處理方式,Standard TouchDelegate和 Targeted TouchDelegate方式(參見CCTouchDelegateProtocol.h中源代碼),CCLayer默認(rèn)是采用***種方式(參見CCLayer的 registerWithTouchDispatcher方法)。

在CCLayer子類中要能接收touch事件,首先需要激活touch支持,在init方法中設(shè)置isTouchEnabled值為YES。

Standard Touch Delegate(CCLayer默認(rèn)采納這種方式)

Standard方法中用戶需要重載四個(gè)基本的touch處理方法,如下:

 
 
  1. -(void) ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event; 

當(dāng)touch事件發(fā)生時(shí),會(huì)調(diào)用該方法響應(yīng)touch事件。如果是單點(diǎn)touch,則只需要調(diào)用 UITouch *touch = [touches anyObject],就可以獲取touch對(duì)象;如果需要響應(yīng)多點(diǎn) touch,則需要調(diào)用[[event allTouches] allObjects]返回一個(gè)UITouch的NSArray對(duì)象,然后使用NSArray的objectAtIndex依次訪問各個(gè)UITouch對(duì)象。為了獲取UITouch對(duì)象的坐標(biāo)(假設(shè)該UITouch名稱為touch),調(diào)用[touch locationInView: [ touch view]]會(huì)返回一個(gè)UIView相關(guān)的坐標(biāo)viewPoint。

使用Cocos2d的新建應(yīng)用程序向?qū)?chuàng)建一個(gè)新的cocos2d application時(shí),在xxxAppDelegate類的applicationDidFinishLaunching方法中CCDirector會(huì)將UIView轉(zhuǎn)換為支持OpenGL ES的EAGLView。此時(shí),我們還需要將前面獲取的UIView中的viewPoint轉(zhuǎn)換為EAGLView坐標(biāo),調(diào)用[[CCDirector sharedDirector] convertToGL: viewPoint]即可實(shí)現(xiàn)。

 
 
  1. -(void) ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;  
  2.  
  3. -(void) ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;   
  4.  
  5. -(void) ccTouchesCancelled:(NSSet*)touch withEvent:(UIEvent *)event;  

這三個(gè)方法和ccTouchesBegan類似。

Targeted Touch Delegate方式

在standard方式中的響應(yīng)處理事件處理的都是NSSet,而 targeted方式只處理單個(gè)的UITouch對(duì)象,在多點(diǎn)觸摸條件下,應(yīng)該采納standard方式。在使用targeted方式之前需要重寫CCLayer中的registerWithTouchDispatcher方法:

//記得在頭文件中導(dǎo)入“CCTouchDispatcher.h”

 
 
  1. -(void) registerWithTouchDispatcher {   
  2.          [[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:0 swallowsTouches:YES];  
  3.    } 

targeted方式中用戶需要重載4個(gè)基本的處理方法,其中ccTouchBegan必須重寫,其他三個(gè)是可選的。

 
 
  1. - (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event; (必須實(shí)現(xiàn))  
  2. - (void)ccTouchMoved:(UITouch *)touch withEvent:(UIEvent *)event;  
  3. - (void)ccTouchEnded:(UITouch *)touch withEvent:(UIEvent *)event;  
  4.  - (void)ccTouchCancelled:(UITouch *)touch withEvent:(UIEvent *)event; 

每次touch事件發(fā)生時(shí),先調(diào)用ccTouchBegan方法,該方法對(duì)每個(gè)UITouch進(jìn)行響應(yīng)并返回一個(gè)BOOL值,若為YES,則后續(xù)的ccTouchMoved、ccTouchEnabled和ccTouchCancelled才會(huì)接著響應(yīng)。

多點(diǎn)觸摸支持

在xxxAppDelegate類的applicationDidFinishLaunching方法中加入下面代碼

 
 
  1. [glView setMultipleTouchEnabled:YES]; 

小結(jié):詳解Cocos2d CCLayerTouch使用方法的內(nèi)容介紹完了,希望通過本文的學(xué)習(xí)對(duì)你有所幫助!


文章題目:詳解Cocos2d CCLayer中Touch使用方法
鏈接地址:http://www.dlmjj.cn/article/cocgcgp.html