Cocos2d - перед перемещением проверьте, свободно ли место (все объекты) - PullRequest
0 голосов
/ 09 февраля 2012

Есть ли в Cocos2d метод, подобный CGRectIntersectsRect, за исключением того, что вместо ограничения одним спрайтом он проверяет ВСЕ объекты?

Ответы [ 2 ]

0 голосов
/ 09 февраля 2012

Вы можете сделать это в цикле.Этот пример - метод для экземпляра спрайта (т. Е. Проигрывателя) для проверки массива других спрайтов.

- (BOOL) checkForCollision
{
    BOOL didCollide = NO;
    CGRect myRect;
    CGRect testRect;

    // assuming anchor point is in the center
    myRect = CGRectMake(self.position.x - self.contentSize.width /2,
                        self.position.y - self.contentSize.height /2,
                        self.contentSize.width,
                        self.contentSize.height);


    for (CCSprite * currSprite in listOfWallSprites) {
        testRect = CGRectMake(currSprite.position.x - currSprite.contentSize.width /2,
                              currSprite.position.y - currSprite.contentSize.height /2,
                              currSprite.contentSize.width,
                              currSprite.contentSize.height);

        if ( CGRectIntersectsRect(myRect, testRect) ) {
            didCollide = YES;
            return didCollide;
        }

    }
    return didCollide;
}
0 голосов
/ 09 февраля 2012

вы можете установить метод, подобный этому

CGRect sprite1Rect = CGRectMake(
                               sprite1.position.x - (sprite1.contentSize.width/2), 
                               sprite1.position.y - (sprite1.contentSize.height/2), 
                               sprite1.contentSize.width, 
                               sprite1.contentSize.height);
CGRect somethingRect = CGRectMake(
                             something.position.x - (something.contentSize.width/2), 
                             something.position.y - (something.contentSize.height/2), 
                             something.contentSize.width, 
                             something.contentSize.height);
CGRect something2Rect = CGRectMake(
                             something2.position.x - (something2.contentSize.width/2), 
                             something2.position.y - (something2.contentSize.height/2), 
                             something2.contentSize.width, 
                             something2.contentSize.height);

if (CGRectIntersectsRect(sprite1Rect, somethingRect) || CGRectIntersectsRect(sprite1Rect, something2Rect)) {
    // do something
}

или

if (CGRectIntersectsRect(sprite1.frame, something.frame) || CGRectIntersectsRect(sprite1Rect, something2Rect)) {
    // do something
}

это означает, что если sprite1 что-то пересекает ИЛИ что-то2, то он будет что-то делать

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