2009-07-23 94 views
2

我真的很抱歉,我意識到有幾個關於cocos2d觸摸檢測的問題(包括this答案幫了我一大堆忙),但我無法讓他們工作。我會評論我連接的答案,而不是問我自己的問題,但我沒有足夠的代表留下評論。在cocos2d中檢測觸摸*屏幕上的任何位置*

我想要做的就是當用戶點擊屏幕上的任何位置時停止動畫。

這裏是到目前爲止我的代碼:

- (BOOL)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    NSLog(@"Touches Began"); 
    UITouch *touch = [touches anyObject]; 
    CGPoint location = [touch locationInView: [touch view]]; 
    location = [[Director sharedDirector] convertCoordinate: location]; 

    CGRect mySurface = (CGRectMake(100, 100, 320, 480)); 
    if(CGRectContainsPoint(mySurface, location)) { 
     NSLog(@"Event Handled"); 
     return kEventHandled; 
     [[Director sharedDirector] stopAnimation]; 
     } 
    return kEventIgnored; 
    NSLog(@"Event Ignored"); 

} 

我都試過BOOLvoidccTouchesBegantouchesBegan,在圖層文件和文件cocosNode,和許多其他的事情。什麼都沒發生。日誌中沒有任何內容顯示,並且動畫繼續其快樂的小路。我究竟做錯了什麼?

回答

2

主要的問題是你得到了return kEventHandled;之後的[[Director sharedDirector] stopAnimation];而不是之前。 return只要它被調用就退出函數,所以之後的任何事情都不會到達。

我沒有在我面前的Mac來檢查你的代碼的其餘部分,但它似乎很好,所以我猜這是主要的問題。如果你甚至沒有看到NSLog(@"Touches Began");,那麼你需要確保你在CocosNode中這樣做,它擴展了Layer

另一個有用的東西(一旦你看到觸摸)爲NSStringFromCGPoint功能,讓您輕鬆顯示,並在CGPoint調試值,所以你可以這樣做:

NSLog(@"This layer was touched at %@", NSStringFromCGPoint(location)); 
+0

我對什麼擴展意味着霧。我應該做@interface GameLayer:圖層或@interface節點:CocosNode ? – Evelyn 2009-07-27 13:04:43