如何销毁SKPhysicsBody?

时间:2014-04-16 15:19:31

标签: sprite-kit 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都是readonly,所以我必须解决这个问题,但除此之外,只需将实际的物理体设置为nil就可以破坏它并制作物理模拟器运行得更快?或者是否有更好的方法来解决性能问题?我希望能够添加200多个球,可能是500或600。

1 个答案:

答案 0 :(得分:3)

使用contact.bodyA.node.physicsBody

-(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");
        }
}

我还没有测试过它