首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SKPhysicsBody malloc错误

SKPhysicsBody malloc错误
EN

Stack Overflow用户
提问于 2014-02-13 13:13:05
回答 1查看 431关注 0票数 0

我创建了一个名为SKSpriteNode的子类Obstacle,并在init中实现了物理体:

代码语言:javascript
复制
-(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;
}

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

代码语言:javascript
复制
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];
           }];
}

在随机运行一段时间(在几秒到几分钟之间)后,应用程序将崩溃,并显示以下信息

代码语言:javascript
复制
malloc: *** error for object 0x16553120: pointer being freed was not allocated

在第一段代码中的以下行抛出错误

代码语言:javascript
复制
SKPhysicsBody* pb = [SKPhysicsBody bodyWithRectangleOfSize: self.size];

我尝试将物理实现移出子类,并在Obstacle实例化后移入场景中,但它抛出了相同的错误。

编辑:

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

代码语言:javascript
复制
*** 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%s需要有一个唯一的名称?

EN

回答 1

Stack Overflow用户

发布于 2014-02-14 00:09:42

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21745797

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档