2011-04-04 138 views
0

我真的很難得到像檢測到精靈上的觸摸工作一樣簡單...任何人都可以幫忙嗎?我試圖創建一個方法作爲CCSprite的類別,如果點在精靈範圍內,給定點或觸摸將返回YES,如果不是,則返回NO。檢測觸摸小精靈並convertToNodeSpaceAR

目前,我已經一個實現,似乎當精靈是不是從Zwoptex裁剪紋理(即用於精靈的形象並沒有剪斷)的部分工作

CGPoint point = [touch locationInView:[touch view]]; 
point = [[CCDirector sharedDirector] convertToGL: point]; 
CGRect spriteRect = self.textureRect; 
spriteRect.origin = ccpAdd(ccpSub(self.positionInPixels, self.anchorPointInPixels), self.offsetPositionInPixels); 
return CGRectContainsPoint(spriteRect, point);  

我已經雖然發現如果精靈在原始紋理中被修剪,這不起作用。這種變化似乎這樣的伎倆

CGRect spriteRect = self.textureRect; 
spriteRect.origin = ccpAdd(self.offsetPositionInPixels, self.positionInPixels); 
return CGRectContainsPoint(spriteRect, [self convertTouchToNodeSpaceAR:touch]);  

但現在我有另一組從幀緩存中的精靈,似乎不喜歡這個的!他們被修剪,我看不出與上面的代碼使用的精靈有什麼不同。有人可以說明convertTouchToNodeSpaceAR的含義嗎?我敢肯定,問題在於我的無知,並且在Cocos2d框架中有這樣一種常見的優雅方式...

回答

0

問題可能是CGRectContainsPoint();。我有一段時間有同樣的問題,我懷疑我們正在比較的指標和要點沒有被轉化爲產生負面結果的同一點系統。

解決方案:

  1. 製作方法/定義能夠正確地轉換了彼此之間的單點系統。
  2. 我做了什麼:創建一個網格類,跟蹤網格上的精靈位置並將觸摸轉換爲網格上的點。

選項1可能對您的需求更有意義,但我需要經常參考相對於彼此的精靈位置,所以對我來說它是有意義的。

如果你想要使用選項1,我會建議獲得一些NSLogs並打印出一個矩形點和你正在比較的點,並找出不同之處。

+0

你好,我很想去選擇1,但我不確定我的精靈在什麼點系統以及有哪些系統可用。我只是很關心convertToNodeSpace方法的功能...... – fedmest 2011-04-05 13:57:09