【问题标题】:SKPhysicsBody malloc errorSKPhysicsBody malloc 错误
【发布时间】:2014-02-13 05:13:04
【问题描述】:

我创建了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;
}

然后在我的场景中,我有一种方法可以每隔几秒钟一次产生 2 个障碍物。

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 被实例化后,我尝试将物理实现移出子类并进入场景,但它会引发相同的错误。

编辑:

调试器让我对我的问题有了新的认识:

*** 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'

SKPhysicsNodes 可能需要一个唯一的名称吗?

【问题讨论】:

    标签: ios iphone objective-c sprite-kit


    【解决方案1】:

    我找到了解决方案!因为我正在为高度生成一个随机数并从另一个障碍物的视图高度中减去该数字,所以有时高度是一个负值,这会导致创建物理体时出现错误。我希望这对其他人有所帮助,因为我整天都在努力解决它

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-04
      • 2011-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-13
      • 2014-03-29
      • 1970-01-01
      相关资源
      最近更新 更多