обнаружение столкновений спрайтов cocos2d - PullRequest
0 голосов
/ 22 марта 2012

В настоящее время я создаю приложение для точки и клика для iphone, используя cocos2d.Однако в моей текущей реализации условие обнаружения столкновения выполняется только в том случае, если я щелкаю в верхнем левом углу, а не где-нибудь внутри спрайта.Если я установлю позицию привязки на 0, это улучшит ситуацию, однако это приведет к поломке функции вращающегося спрайта.

Вот мой код, может кто-нибудь заметить что-то не так здесь?в моем коде инициализации

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;
}   

Любая помощь будет принята с благодарностью

Ответы [ 2 ]

0 голосов
/ 22 марта 2012

Чтобы справиться с вращением, лучшим подходом будет преобразование точки касания в локальное пространство спрайта (это также будет корректно обрабатывать иерархию спрайтов)

CGPoint ptConv = [cocosGuy convertTouchToNodeSpace: touch];
if (CGRectContainsPoint ([cocosGuy boundingBox], ptConv)
{
    retValue = YES;
}
0 голосов
/ 22 марта 2012

Сгенерированный вами прямоугольник принимает точку касания, а затем делает прямоугольник из этой точки углом.

CCSprites имеют свою точку происхождения в середине изображения. Таким образом, вы должны учитывать это при создании прямоугольника

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

...