2012-02-24 66 views
0

我一直在研究這個小時(實際上是2天),只是無法弄清楚什麼是錯的。觸摸被接受並處理,但isTouchHandled測試過早觸發TRUE;彷彿一個不同的邊界框被觸及。我有幾個不重疊的CCSprite按鈕,每個按鈕都指向levelButtons陣列。迭代查看哪一個被觸及;但它總是錯誤的。CGRectContainsPoints和邊界框檢查關閉了幾個像素

CGRectContainsPoints方法是否會被拋棄,如果這些精靈在他們自己的圖層中,然後在另一個圖層?換句話說,CGRectContainsPoints使用position報告的像素位置的原始相等性?如果是這樣的話,精靈相對於整個屏幕的位置與它報告的位置不同,如果它是一個相對於父親的孩子。也許這跟它有關係?我的數組和它的內容標籤正確排列,我已經記錄並檢查了很多次;它似乎是邊界框檢查。

-(BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event{ 
    CCLOG (@"levelButtons size:%i",[self.levelButtons count]); 
    BOOL isTouchHandled = NO; 
    for (int i=0;i<25;i++){ 

     CCSprite*temp=(CCSprite*)[self.levelButtons objectAtIndex:i]; 

     CCLOG(@"iteration temp.tag: %i for object: %i",temp.tag,i); 

      isTouchHandled= CGRectContainsPoint([temp boundingBox], [[CCDirector sharedDirector] convertToGL:[touch locationInView: [touch view]]]); 

     if (isTouchHandled) { 

      CCLOG(@"level touched: %i",temp.tag); 

      break; 
     } 

    } 


    return isTouchHandled; 
} 

更新:順便說一句,我也是剛子類CCSprite並添加德勤方法個別精靈以這種方式,以我的精靈陣列出來的圖片。結果是一樣的,所以我懷疑當你的rect是其他孩子的孩子時,CGRectContainsPoints不正常工作,我懷疑座標沒有被正確報告。

+0

使用這裏的信息:http://www.cocos2d-iphone.org/forum/topic/9636我可以確認邊界框確實正在使用邊界框位置的附加對齊日誌記錄在我的精靈 – johnbakers 2012-02-24 02:52:49

+0

上正確繪圖,我已經確認一個圖層上的sprite子的邊界框與屏幕不相關,因此cgrectcontainspoint沒有意識到它獲得了錯誤的座標。 – johnbakers 2012-02-24 03:11:32

回答

0

我解決了這個通過爲CGRectContainsPoint測試創建一個新的CGRect,並翻譯邊框轉換爲實際的屏幕矩形;如果邊框測試位於子精靈(或圖層)上,它將不會自行工作。它僅返回其相對於父級的本地位置。

0

我認爲這可能是一個數組問題,你會得到精靈。任何方式,這就是我如何使用代碼獲取精靈標籤。

UITouch *touch = [touches anyObject]; 
CGPoint location = [touch locationInView:[touch view]]; 
location = [[CCDirector sharedDirector] convertToGL:location]; 


for(int i1=0;i1<=25;i1++) 
{ 
    CCSprite *sprite1 = (CCSprite *)[self getChildByTag:i1]; 
    if(CGRectContainsPoint([sprite1 boundingBox], location)) 

    { 
     //Your Code 
      break; 
    } 

} 
+0

我看到你沒有使用標準的邊界框檢查。我懷疑我的數組是否是問題,畢竟標籤在sprite上,而不是存儲在其他地方,所以如果精靈是觸摸點,它應該報告該觸摸的標籤。但也許這是由於邊界框如何與父子節點關係一起工作 – johnbakers 2012-02-24 02:46:45

+0

好的。我更新了我的代碼。邊界框將返回與CGRect相同的行爲...我認爲這不是邊界框的問題。 – Anish 2012-02-24 02:49:42