我正在模拟一个蛋形SKSprite节点的物理。 但是,有断言失败错误发生:
断言失败:(edge.LengthSquared()> 1.19209290e-7F * 1.19209290e-7F),功能设置,文件/SourceCache/PhysicsKit_Sim/PhysicsKit-6.5.4/PhysicsKit/Box2D/Collision/Shapes/b2PolygonShape。 cpp,第180行。
以下是代码:
self.egg = [SKSpriteNode spriteNodeWithImageNamed:IMAGE_NAME_EGG];
[self.egg setScale:0.2];
self.egg.position = CGPointMake(self.size.width/2,self.size.height - self.egg.size.height/2);
self.egg.name = IMAGE_NAME_EGG;
CGPoint startPoint = CGPointMake(0, self.egg.size.height*0.4);
CGPoint endPoint = CGPointMake(self.egg.size.width, startPoint.y);
CGPoint controlPointLeft = CGPointMake(startPoint.x, self.egg.size.height);
CGPoint controlPointRight = CGPointMake(endPoint.x, controlPointLeft.y);
CGMutablePathRef pathRef = CGPathCreateMutable();
CGPathMoveToPoint(pathRef, NULL, startPoint.x, startPoint.y);
CGPathAddQuadCurveToPoint(pathRef, NULL, controlPointLeft.x, controlPointLeft.y, self.egg.size.width/2, controlPointLeft.y);
CGPathAddQuadCurveToPoint(pathRef, NULL, controlPointRight.x, controlPointRight.y, endPoint.x,endPoint.y);
CGPathAddArc(pathRef, NULL, self.egg.size.width/2, startPoint.y, self.egg.size.width/2, 0, M_PI, NO);
self.egg.physicsBody = [SKPhysicsBody bodyWithPolygonFromPath:pathRef];
self.egg.physicsBody.dynamic = YES;
self.egg.physicsBody.categoryBitMask = eggCategory;
self.egg.physicsBody.contactTestBitMask = rabbitCategory;
self.egg.physicsBody.collisionBitMask = rabbitCategory;
self.egg.physicsBody.allowsRotation = YES;
[self addChild:self.egg];
出了什么问题?任何人都可以帮我解决?非常感谢你!
答案 0 :(得分:2)
当你使用" bodyWithPolygonFromPath:",你确保路径符合以下条件:
1)。凸多边形路径 2)。逆时针绕组 3)。没有自我交叉点。 //这些点是相对于拥有节点的原点指定的。
您可以在SKPhysicsBody的应用类参考中找到它: https://developer.apple.com/library/ios/documentation/SpriteKit/Reference/SKPhysicsBody_Ref/Reference/Reference.html#//apple_ref/occ/clm/SKPhysicsBody/bodyWithPolygonFromPath:
答案 1 :(得分:1)
根据断言,其中一条边比sprite套件预期的最小尺寸短。
Assertion failed: (edge.LengthSquared() > 1.19209290e-7F * 1.19209290e-7F)
检查您的路径坐标并确保它不会太小。
答案 2 :(得分:0)
在尝试制作三角形路径时,我在较旧的iOS7 iPhone上出现此错误。事实证明,添加最后一行以使路径返回到起点导致错误(尽管较新的iOS版本允许这样做。)IE:
CGPathMoveToPoint(path, nil, self.size.width/2, self.size.height/2)
CGPathAddLineToPoint(path, nil, -self.size.width/2, 0.0)
CGPathAddLineToPoint(path, nil, self.size.width/2, -self.size.height/2)
CGPathAddLineToPoint(path, nil, self.size.width/2, self.size.height/2) //REMOVED THIS LINE TO FIX
CGPathCloseSubpath(path)
这解释了为什么边缘太小而无法评估 - 两个相同点之间的边缘为0!