Переместите тело бурундука в позицию спрайта - PullRequest
1 голос
/ 31 июля 2010

У меня фигура Бурундук, с телом, в космосе. Я удаляю тело из пространства, чтобы я мог расположить его, чтобы оно не падало из-за силы тяжести и т. Д. Мне нужно, чтобы это тело двигалось, поэтому я не делаю его неподвижным.

Мне нужно, чтобы тело обновило свою позицию в соответствии с положением спрайта Cocos2D в сцене + смещение.

Я устанавливаю положение тел с помощью:

collShape-> body-> p = collSprite.position; - это, кажется, не работает, не компилирует ошибки, оно работает, но форма столкновения не перемещается.

Можно ли перемещать тело столкновения в зависимости от положения спрайта в моем методе тиков?

Ответы [ 2 ]

0 голосов
/ 03 февраля 2013

Когда вы вызываете cpSpaceStep, создается список активных фигур, и для каждого вызывается cpShapeUpdateFunc. Эта функция выглядит так:

void
cpShapeUpdateFunc(cpShape *shape, void *unused)
{
    cpBody *body = shape->body;
    cpShapeUpdate(shape, body->p, body->rot);
}

... который обновляет форму в соответствии с расположением тела и вращением, к которому он прикреплен. Если этого не происходит, возможно, ваша фигура не была добавлена ​​в пространство или не была добавлена ​​в тело?

0 голосов
/ 20 января 2011

То, что вы делаете, должно быть возможным.

Самый простой способ - создать новый класс, производный от CCSprite, а затем переопределить метод setPosition для обновления тела спрайта.

ПреимуществоЭто означает, что каждый раз, когда позиция спрайта изменяется (явно вами или любой анимационной последовательностью), тело Бурундука будет автоматически обновляться.

-(void) setPosition:(CGPoint) p{
    [super setPosition:p];
    if (self->body != nil) {
        self->body->p.x = p.x;
        self->body->p.y = p.y;
        //Note: also call cpSpaceRehash to let Chipmunk know about the new position
    }
}
...