cocos2d CCSprite Проблема столкновения - PullRequest
1 голос
/ 04 января 2012

[У меня есть 2 объекта, оба они подкласс CCSprite.Каждый из них имеет переменную CCSprite, которая фактически представляет изображение спрайта

Пример:

@interface Player : CCSprite
{
    CCSprite *sprite;
}

@property (nonatomic, retain) CCSprite *sprite;

Я пытаюсь обнаружить столкновение обоих, но когда я пытаюсь:

- (void)detectCollision:(id)sender
{    
    for (Player *tempPlayer in self.playersArray) {        
        if (CGRectIntersectsRect([tempPlayer boundingBox], [mainPlayer boundingBox])) {
            //Collision
        }
    }
}

Он не распознает столкновения, когда я пытаюсь:

- (void)detectCollision:(id)sender
{    
    for (Player *tempPlayer in self.playersArray) {        
        if (CGRectIntersectsRect([tempPlayer.sprite boundingBox], [mainPlayer.sprite boundingBox])) {
            //Collision
        }
    }
}

Он обнаруживает столкновения, когда оба объекта отображаются на экране, даже если они еще не столкнулись.

Редактировать: Забыл добавить к объектам boundingBox ...

Спасибо

Ответы [ 3 ]

1 голос
/ 04 января 2012

ограничивающие рамки tempPlayer.sprite и mainPlayer.sprite будут представлять прямоугольник в их собственном суперпредставлении, которое также является спрайтом, а не миром. Например, если прямоугольник mainPlayer равен (150, 200, 100, 100), а спрайт внутри него имеет тот же прямоугольник, его boundingBox будет (0, 0, 100, 100).

Однажды я получил эту проблему и решил ее следующим образом: x для tempPlayer.sprite в мировых координатах = x для tempPlayer + x для tempPlayer.sprite.

и то же самое для вас.

1 голос
/ 04 января 2012

Вы смотрели справочную информацию для CGRectIntersectCGRect ?

Вы заметите, что для этого необходимо передать две структуры CGRect. Вы передаете объект Player в первом опубликованном вами коде, а CCSprite - во втором.

0 голосов
/ 04 января 2012

Я никогда не использую ограничивающие рамки.Возможно, вам придется сделать некоторые математические и выяснить длину / высоту ваших объектов в пикселях и работать с этим.Кроме того, если у вас установлены какие-либо привязки, это может отбросить все, и ваше столкновение не будет работать.

Чтобы реализовать свою собственную функцию / объект столкновения, вы можете сделать это внутри своей функции времени (возможно, ccTime, еслииспользуют cocos2d) и работают со своими CGPoints (положениями)

Это то, что я бы сделал лично, но большинство людей используют chipmunk для программирования iphone.

...