0

我目前正在使用cocos2d創建一個點並點擊app的應用程序。然而,在我目前的實現中,碰撞檢測條件只有在我點擊左上角而不是精靈內的任何地方時纔是正確的。如果我將錨點位置設置爲0,這會讓事情變得更好,但這會導致我的旋轉精靈功能中斷。cocos2d sprite碰撞檢測

這裏是我的代碼,任何人都可以在這裏發現任何錯誤? 在我的初始化代碼

if((self=[super init])) 
{  

     cocosGuy = [TouchableSprites spriteWithFile: @"Icon.png"]; 
     //[cocosGuy setAnchorPoint:CGPointMake(0, 0)]; 
     cocosGuy.position = ccp(200, 300); 
    //[cocosGuy setPosition: ccp(100,100)]; 
     [self addChild:cocosGuy]; 
    self.isTouchEnabled = YES; 
} 
在touchBegan

我確定圖像是否被觸摸

CGPoint pt = [touch locationInView:[touch view]]; 
    CGPoint ptConv = [[CCDirector sharedDirector] convertToGL:pt]; 

CGSize size = [cocosGuy contentSize]; 
CGPoint point = [cocosGuy position]; 
CGRect rect = CGRectMake(point.x, point.y, size.width, size.height); 

if (CGRectContainsPoint(rect, ptConv)) 
{ 
    retValue = YES; 
} 

任何幫助,將不勝感激

回答

0

您生成RECT採用觸摸點,然後將該點的矩形作爲拐角。

CCSprites的原點位於圖像中間。所以,你需要考慮的是讓你的矩形

CGRect rect = CGRectMake(point.x - (size.width/2), point.y - (size.height/2), size.width, size.height);

0

爲了應對旋轉的最好辦法是觸摸點轉換成精靈局部空間(這也將正確處理縮放和精靈層次)

CGPoint ptConv = [cocosGuy convertTouchToNodeSpace: touch]; 
if (CGRectContainsPoint ([cocosGuy boundingBox], ptConv) 
{ 
    retValue = YES; 
} 
+0

感謝球員們,我在你的幫助下對它進行了整理,同樣這條線沒有幫助旋轉,擺脫了它解決了部分問題 – godzilla 2012-03-25 01:44:08

+0

[selSprite runAction:[CCRotateTo actionWithDuration:0.1 angle:0]]; – godzilla 2012-03-25 01:44:54