как обнаружить прикосновение к повернутому спрайту в cocos2d - PullRequest
1 голос
/ 03 октября 2011

Я повернул спрайт до 90. Я проверил местоположение касания повернутого спрайта следующим образом:

matchsprite.rotation=90;

CGRect r=CGRectMake(matchstick.position.x, matchstick.position.y, matchstick.contentSize.height,matchstick.contentSize.width);
if(CGRectContainsPoint(r, location))    
    NSLog(@"Hii");

В чем ошибка в этом коде? Я не получил "Hii". Как определить, нажимаем ли мы на этот повернутый спрайт или нет?

Ответы [ 2 ]

1 голос
/ 13 октября 2011

Вот два метода расширения (категории) CCNode, которые я добавил в игровой движок Kobold2D :

-(BOOL) containsPoint:(CGPoint)point
{
    CGRect bbox = CGRectMake(0, 0, contentSize_.width, contentSize_.height);
    CGPoint locationInNodeSpace = [self convertToNodeSpace:point];
    return CGRectContainsPoint(bbox, locationInNodeSpace);
}

-(BOOL) containsTouch:(UITouch*)touch
{
    CCDirector* director = [CCDirector sharedDirector];
    CGPoint locationGL = [director convertToGL:[touch locationInView:director.openGLView]];
    return [self containsPoint:locationGL];
}

Проверка, находится ли точка на спрайте (или метка илилюбой другой узел) тогда просто:

UITouch* uiTouch = [touches anyObject];
if ([aSprite containsTouch:uiTouch])
{
    // do something
}
0 голосов
/ 03 октября 2011

Свойство position ccsprite дает вам координату центра, а не позицию левого верхнего угла.

вы можете сделать прямоугольник следующим образом

CGRect r=CGRectMake(matchstick.position.x - matchstick.contentSize.width / 2, matchstick.position.y + matchstick.contentSize.height / 2, matchstick.contentSize.height, matchstick.contentSize.width);

Я не увереннужно вычесть или добавить половину ширины, но я думаю, что вы можете немного поработать над этим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...