我一直在研究這個小時(實際上是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不正常工作,我懷疑座標沒有被正確報告。
使用這裏的信息:http://www.cocos2d-iphone.org/forum/topic/9636我可以確認邊界框確實正在使用邊界框位置的附加對齊日誌記錄在我的精靈 – johnbakers 2012-02-24 02:52:49
上正確繪圖,我已經確認一個圖層上的sprite子的邊界框與屏幕不相關,因此cgrectcontainspoint沒有意識到它獲得了錯誤的座標。 – johnbakers 2012-02-24 03:11:32