2013-02-18 3 views
0

Я застрял буквально через несколько недель, пытаясь понять, как я могу игнорировать прикосновения к прозрачным областям спрайта. Я пытался отслеживать идеальные столкновения пикселей, используя этот учебник - http://www.learn-cocos2d.com/2011/12/fast-pixelperfect-collision-detection-cocos2d-code-1of2/ безрезультатно. Это в настоящее время, как мой код выглядит:Игнорирование прозрачных областей спрайтов в cocos2d

-(void)checkTap:(CGPoint)touch{ 
BOOL yesNo = NO; 
if(yesNo == NO) 
{ 
    sprTap.position = ccp(touch.x, touch.y); 
}} 

-(void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ 
NSSet *allTouch = [event allTouches]; 
UITouch *touch = [[allTouch allObjects]objectAtIndex:0]; 
CGPoint location = [touch locationInView:[touch view]]; 
location = [[CCDirector sharedDirector]convertToGL:location]; 

[self checkTap:location]; 
touchFlag = 0; 

for(int i = 0; i < [sprArray count]; i++) 
{ 
    KKPixelMaskSprite *sprite = (KKPixelMaskSprite *)[sprArray objectAtIndex:i]; 
     if([sprTap intersectsNode:sprite]) 
     { 
      selectedSprite = sprite; 
      touchFlag = 1; 
      break; 
     } 
}} 

-(void)ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{ 
NSSet *allTouch = [event allTouches]; 
UITouch *touch = [[allTouch allObjects]objectAtIndex:0]; 
CGPoint location = [touch locationInView:[touch view]]; 
location = [[CCDirector sharedDirector]convertToGL:location]; 

[sprTap setPosition:location]; 
if(touchFlag == 1) 
{ 
    _spriteTouch = TRUE; 
    [selectedSprite setPosition:location]; 
} 
else 
{ 
    for(int i = 0; i < [sprArray count]; i++) 
    { 
     KKPixelMaskSprite *sprite = (KKPixelMaskSprite *)[sprArray objectAtIndex:i]; 
       if([sprTap intersectsNode:sprite]) 
       { 
        selectedSprite = sprite; 
        touchFlag = 1; 
        break; 
       } 
      } 
     } 
}} 

Проблема с этим, когда ограничивающий прямоугольник sprTap пересекается с ограничивающим прямоугольником спрайта, он движется как и так как мои спрайты не являются полными квадратами, что выигранный» т. е. делать. Я также попробовал pixelMaskIntersectsNode, но это тоже не работает. Как еще я могу игнорировать прикосновения к прозрачным частям спрайта? Пожалуйста, помогите мне.

ответ

1

Вы можете использовать CGMutablePathRef обнаружить прозрачную часть:

Приведите мой ответ в this thread.

Информации о том, как создать CGPath: Here

Для получения дополнительной информации, Click Here

+0

Спасибо за ответ. Я дам ему попробовать. У меня есть вопрос относительно этого ответа, хотя, как я могу реализовать это, если есть два или более спрайтов, которые можно коснуться? – user1597438

+0

Я как-то понял, как реализовать это, но у меня проблема. Мои спрайты должны двигаться в зависимости от направления движения. Моя проблема в том, что всякий раз, когда я сажусь вверх, спрайты просто перемещаются влево. Почему это? – user1597438

+0

ссылается на это: http://stackoverflow.com/questions/14953630/path-is-not-detected-properly-in-cocos2d/14954003#14954003 – Guru

Смежные вопросы