2013-10-17 62 views
0

我繼承了一個名爲newSprite.h/newSprite.m精靈,我在它如何檢測子精靈觸摸

CCSprite *nsprite = [CCSprite spriteWithFile:@"mouse.png"]; 
[self addChild: nsprite]; 

和gamelayer.m,我添加以下代碼添加一個精靈

newSprite *newp = [newSprite node]; 
newp.position = ccp(actualX, actualY); 
[self addChild:newp]; 
[_NSMutableArrayName addObject:newp]; 

,當我用下面的代碼來檢測我感動

- (void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    UITouch *touch = [touches anyObject]; 
    CGPoint location = [self convertTouchToNodeSpace: touch]; 

for (CCSprite *target in _NSMutableArrayName) { 
    if (CGRectContainsPoint(target.boundingBox, location)) { 
     CCLOG(@"yes i am touched"); 
    } 
    } 
} 

,但它不工作這精靈,精靈不能被檢測到,那麼錯在哪裏?請幫幫我,謝謝

回答

0

嘗試使用這樣的:

- (void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    UITouch *touch = [touches anyObject]; 
    CGPoint location = [self convertTouchToNodeSpace:touch]; 

    for (CCSprite *target in _NSMutableArrayName) { 
     CGSize size = node.contentSize; 
     CGRect r = CGRectMake(0.f, 0.f, 
           size.width, size.height); 
     if (CGRectContainsPoint(r, local)) { 
      CCLOG(@"yes i am touched"); 
     } 
    } 
} 
+0

它仍然不起作用 – yegomo

+0

更新的代碼。試試看。你可能需要在'size'上應用'parentToNode'變換,但這應該是個訣竅。 –

0

您正在嘗試以檢測子精靈接觸,並給予家長精靈的邊界。

首先,將nsprite作爲NewSprite中的類變量在GameLayer中調用時保留其引用。然後嘗試更改此方法,如:

- (void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    UITouch *touch = [touches anyObject]; 
    CGPoint location = [self convertTouchToNodeSpace: touch]; 

    for (CCSprite *target in _NSMutableArrayName) { 
    CCSize size = target.nSprite.contentSize; 
    CCRect rect = CCRectMake(target.position.x - size.width/2, target.position.y - size.height/2, width, height); 

    if (CGRectContainsPoint(rect, location)) { 
     CCLOG(@"yes i am touched"); 
    } 
    } 
} 
+0

如何在NewSprite中將nsprite作爲類變量在GameLayer中調用時保留其引用?謝謝 – yegomo

+0

我的意思是在NewSprite.h中聲明你的變量像CCSprite * nSprite; 及其屬性像@property(只讀)CCSprite * nSprite; – nomann

+0

我只是這樣做,但它顯示錯誤:在'CCSprite *'類型的對象上找不到屬性'nSprite' – yegomo