1
我,基本上在苹果提供的新框架中尝试一个有洞的矩形,唯一的问题是它默认的方法bodyWithPolygonFromPath不接受凹多边形,所以我试图解决这个问题,如下所示:创建凸SKPhisycsBodies
CGPathMoveToPoint (path, NULL, self.size.width/4.0, self.size.height/4.0);
CGPathAddLineToPoint(path, NULL, self.size.width/2.0, -self.size.height/4.0);
CGPathAddLineToPoint(path, NULL, -self.size.width/2.0, -self.size.height/4.0);
CGPathAddLineToPoint(path, NULL, -self.size.width/2.0, self.size.height/4.0);
CGPathCloseSubpath (path);
self.physicsBody = [SKPhysicsBody bodyWithPolygonFromPath:path];
self.physicsBody.affectedByGravity = YES;
self.physicsBody.categoryBitMask = solidCategory;
self.physicsBody.dynamic = YES;
[self addChild:shape1];
self.auxiliaryShapeNode = [[SKSpriteNode alloc] init];
CGPathMoveToPoint (path_aux, NULL, 3*self.size.width/8.0, 0);
CGPathAddLineToPoint(path_aux, NULL, self.size.width/2.0, 1.5*self.size.height/4.0);
CGPathAddLineToPoint(path_aux, NULL, self.size.width/2.0, -self.size.height/4.0);
CGPathCloseSubpath (path_aux);
self.auxiliaryShapeNode.anchorPoint = CGPointMake(-3.0, 1.0/2.5);
self.auxiliaryShapeNode.physicsBody = [SKPhysicsBody bodyWithPolygonFromPath:path_aux];
self.auxiliaryShapeNode.physicsBody.dynamic = YES;
self.auxiliaryShapeNode.physicsBody.categoryBitMask = solidCategory;
[self addChild:self.auxiliaryShapeNode];
[self.scene.physicsWorld addJoint:[SKPhysicsJointFixed jointWithBodyA:self.physicsBody bodyB:self.auxiliaryShapeNode.physicsBody anchor:self.position]];
break;
其中自为i创建具有SKSprite节点作为辅助体的形状,从而该形状可以由两个凸多边形进行定制精灵节点时,它创建,因为它被认为形状,但当场景开始播放关节不起作用,因为它应该是这样,并将小三角形的方式从其开始的位置移开
您是否使用此代码获取内存泄漏?我使用多边形窗体路径创建物理体,并在乐器中向我展示PhysicsKit中的奇怪内存泄漏(负责的帧包含有关PKPoint对象的信息)。我的实现看起来与你非常相似,但我没有关节,创建主体后,我调用'CGPathRelease(path)'。我不知道这是Sprite Kit中的错误,还是我做错了什么。 – Darrarski
我忘记补充说,当我使用'[SKPhysicsBody bodyWithCircleOfRadius:radius]'或[SKPhysicsBody bodyWithRectangleOfSize:size]'方法创建主体时,我根本没有得到内存泄漏。 – Darrarski
嗯...也许你应该分享你的代码,我没有发现任何内存泄漏,它仍然工作得很好......也许它与你的多边形的复杂性有关,因为最复杂的是, ve使用的是梯形,但如果你分享你的代码,我会很乐意帮助,如果我可以 – heczaco