SKPhysicsBody malloc错误

我创build了一个叫SKSpriteNode Obstacle的子类,并在init实现物理主体:

 -(id)initWithHeight:(NSInteger)height flipped:(BOOL)flipped { if (self = [super initWithImageNamed: @"obstacle.png"]) { [self setName: @"obstacle"]; [self setSize: CGSizeMake(OBSTACLE_WIDTH, height)]; [self setPosition: CGPointZero]; // rotate if needed if (flipped) { [self runAction: [SKAction rotateByAngle: 3.14 duration: 0.0f]]; } // physics SKPhysicsBody* pb = [SKPhysicsBody bodyWithRectangleOfSize: self.size]; pb.dynamic = NO; pb.affectedByGravity = NO; [pb setCategoryBitMask: obstacleCategory]; [pb setContactTestBitMask: playerCategory]; [self setPhysicsBody: pb]; } return self; } 

然后在我的场景中,我有一种方法每秒钟产生两个障碍物。

 Obstacle *ob0 = [[Obstacle alloc] initWithHeight: h0 flipped: NO]; [bottom setPosition: CGPointMake(x0, y0)]; Obstacle *ob1 = [[Obstacle alloc] initWithHeight: h1 flipped: YES]; [top setPosition: CGPointMake(x1, y1)]; NSArray* objs = @[ob0, ob1]; for (Obstacle* o in objs) { [self addChild: o]; [o runAction: [SKAction moveToX: -OBSTACLE_WIDTH duration: SPAWN_SPEED*2] completion:^{ [o removeFromParent]; }]; } 

运行了一段随机的时间(几秒钟和几分钟之间)后,应用程序将崩溃

 malloc: *** error for object 0x16553120: pointer being freed was not allocated 

第一块代码中的错误被引发到下一行

 SKPhysicsBody* pb = [SKPhysicsBody bodyWithRectangleOfSize: self.size]; 

我已经尝试将物理实现移出子类并在Obstacle被实例化之后进入场景,但是会抛出相同的错误。

编辑:

debugging器给了我新的见解我的问题:

 *** Terminating app due to uncaught exception 'Cant add body, already exists in a world', reason: 'Cant add body <SKPhysicsBody> type:<Rectangle> representedObject:[<SKSpriteNode> name:'obstacle' texture:[<SKTexture> 'obstacle.png' (50 x 200)] position:{400, 446} size:{50, 244} rotation:0.00], already exists in a world' 

SKPhysicsNode是否需要一个唯一的名字?

我find了解决scheme! 因为我产生一个随机数的高度,并从视图的高度减去另一个障碍物的高度,有时高度是一个负值,这将导致创build物理体的错误。 我希望这能帮助其他人,因为我一整天都在捶胸顿足