2012-04-15 24 views
1

我有一個CCLayerMyLayer中,我處理觸摸事件:麻煩與CCLayer子類敲擊檢測

(BOOL) ccTouchBegan:(UITouch *) touch withEvent:(UIEvent *) event 

我設置MyLayer情況下,像這樣的內容大小:

`myLayer.contentSize = CGSizeMake(30.0, 30.0);` 

然後我將MyLayer實例添加爲ParentLayer的子項。出於某種原因,我可以在屏幕上的任何地方點擊,並且MyLayer實例將檢測到水龍頭。我只想檢測可見部分/內容大小的水龍頭。 我該怎麼做?

MyLayer實例是否在某處從某處繼承了「可定位區域」?我已經驗證剛剛點擊的實例的contentSize正如預期的那樣是(30, 30)。也許contentSize不是指定CCLayer子類可點擊區域的方式。

回答

4

當在特定CCLayer上啓用觸摸時,它將接收窗口中的所有觸摸事件。這就是說,如果有多個圖層,所有圖層都會接收到相同的圖層。

爲了減輕這一點,從UITouch獲取位置,將其轉​​換爲Cocos2d座標,然後檢查它是否在您所關注的圖層的邊界內。

下面是一些代碼一起工作:

CCLayer * ccl = [[CCLayer alloc] init]; 
CGPoint location = [touch locationInView:[touch view]]; 
location = [[CCDirector sharedDirector] convertToGL:location]; 
if (CGRectContainsPoint(CGRectMake(ccl.position.x - ccl.contentSize.width/2, ccl.position.y - ccl.contentSize.height/2, ccl.contentSize.width, ccl.contentSize.height), location)) { 
    //continue from there... 
} 
+0

這很有趣。我很驚訝CCLayer會接收它的contentSize之外的內容。 – SundayMonday 2012-04-15 02:49:10

+1

這有點奇怪,我同意。但是,CCLayers可能相當複雜,以確定它們彼此嵌套的位置。這可能會保持主線程可用於圖形處理。 – bendu 2012-04-15 02:51:14