Как уничтожить SKPhysicsBody?

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

Как только я доберусь до 200 физических тел, игра станет очень медленной, поэтому я хотел бы уничтожить тела. Вот что я пытался в своем коде:

-(void)didBeginContact:(SKPhysicsContact *)contact {

    if (contact.contactPoint.y < 150) {
        if (contact.bodyA.categoryBitMask == MYPhysicsCategoryBall) {
            NSLog(@"body a is ball");
            contact.bodyA = nil;
        }

        if (contact.bodyB.categoryBitMask == MYPhysicsCategoryBall) {
            NSLog(@"body b is a weapon");
        }
}

Это не работает, потому что contact.bodyA и contact.bodyB оба доступны только для чтения, поэтому я должен это исправить, но кроме этого, просто установив фактическое физическое тело на nil, уничтожит его и заставит физический симулятор работать быстрее? Или есть лучший способ исправить падение производительности? Я хочу иметь возможность добавить более 200 мячей, может быть, 500 или 600.


person Cocorico    schedule 16.04.2014    source источник


Ответы (1)


Используйте 1_:

-(void)didBeginContact:(SKPhysicsContact *)contact {

    if (contact.contactPoint.y < 150) {
        if (contact.bodyA.categoryBitMask == MYPhysicsCategoryBall) {
            NSLog(@"body a is ball");
//            contact.bodyA = nil;
            contact.bodyA.node.physicsBody = nil;
        }

        if (contact.bodyB.categoryBitMask == MYPhysicsCategoryBall) {
            NSLog(@"body b is a weapon");
        }
}

Я не тестировал это, хотя

person Andrey Gordeev    schedule 16.04.2014