Как получить спрайт прямоугольник удобным способом? - PullRequest
2 голосов
/ 11 января 2012

В разработке игр cocos2d CGRectContainsPoint метод, часто используемый для обнаружения касания CCSprite.

Я использую код fllow, чтобы получить свойство спрайта (которое в CCNode)

- (void)ccTouchEnded:(UITouch *)touch withEvent:(UIEvent *)event {
    CCLOG(@"ccTouchEnded");
    CGPoint location = [touch locationInView:[touch view]];
    location = [[CCDirector sharedDirector] convertToGL:location];
    CCLOG(@"location.x:%f, y:%f", location.x, location.y);
    CGRect rect;

    rect = CGRectMake(self.firstCard.face.position.x-(self.firstCard.face.contentSize.width/2), self.firstCard.face.position.y-(self.firstCard.face.contentSize.height/2),
                      self.firstCard.face.contentSize.width, self.firstCard.face.contentSize.height);
    if (CGRectContainsPoint(rect, location)) {
        CCLOG(@"first card touched");
        [firstCard open];
    }

    rect = CGRectMake(self.secondCard.face.position.x-(self.secondCard.face.contentSize.width/2), self.secondCard.face.position.y-(self.secondCard.face.contentSize.height/2),
                      self.secondCard.face.contentSize.width, self.secondCard.face.contentSize.height);
    if (CGRectContainsPoint(rect, location)) {
        CCLOG(@"second card touched");
        [secondCard open];
    }


}

Я хочу знать, есть ли удобный способ получить прямоугольник CCSprite прямо?

Ответы [ 2 ]

2 голосов
/ 13 января 2012

Пожалуйста, используйте boundingBox, я думаю, это будет отличный вариант для использования.

Как это:

- ( void ) ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];
   locationTouchBegan = [touch locationInView: [touch view]];

    //location is The Point Where The User Touched

    locationTouchBegan = [[CCDirector sharedDirector] convertToGL:locationTouchBegan];

    //Detect the Touch On sprite

    if(CGRectContainsPoint([sprite boundingBox], locationTouchBegan))
    {
        isSpriteTouched=YES;
    } 

}
2 голосов
/ 12 января 2012

Kobold2D имеет удобный метод содержит Point в качестве расширения CCNode (категория Objective-C), который вы можете скопировать в своем проекте:

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

Затем ваш код будет упрощен ион также будет работать с повернутыми и / или масштабированными спрайтами (метод boundingBox не может правильно проверить повернутые и масштабированные спрайты).

if ([firstCard.face containsPoint:location]) {
        CCLOG(@"first card touched");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...