Как я могу определить, касается ли действие касания спрайта или нет в состоянии увеличения? - PullRequest
1 голос
/ 04 июля 2010

Сначала я увеличил слой, который содержит спрайты. Теперь мне нужно ощутить прикосновение к спрайту. Я пытался следующим образом, но не могу достичь цели-

CGRect tRect= [[aSprite displayedFrame] rect];
    if(CGRectContainsPoint(tRect, touchedPosition))
{
    NSLog(@"touched:>> touch at (%f,%f)",touchedPosition.x,touchedPosition.y);
    // Do something, maybe return kEventHandled;
}
else{
    NSLog(@"NOT touched: touch at (%f,%f)",touchedPosition.x,touchedPosition.y);
}

К вашему сведению: я использовал cocos2d framework

Ответы [ 3 ]

1 голос
/ 08 июля 2010

Во-первых, вам нужно убедиться, что вы правильно получили местоположение из UITouch.

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

Во-вторых, вам нужно проверить свое прикосновение к ограничивающей рамке спрайта.

if (CGRectContainsPoint([sprite boundingBox], location)) {
    // The sprite is being touched.
}
0 голосов
/ 13 июля 2010

Наконец-то я нашел решение :), вот код

CGPoint location = [touch locationInView: [touch view]];
CGPoint convertedLocation = [[CCDirector sharedDirector] convertToGL:location];

CGPoint tapPosition = [self convertToNodeSpace:convertedLocation];

где 'self' - слой держателя спрайта, как я уже указывал Этот слой прослушивает событие касания.

0 голосов
/ 11 июля 2010

Фрэнк Митчелл прав.Другой подход заключается в добавлении кода прослушивания к самому спрайту, так что Cocos сделает всю работу за вас.Он будет отправлять события sprite ccTouchesBegan, только если он действительно был затронут.

...