我正在尝试使用SKPhysicsBody
中的多边形初始化CGPath
。
它看起来像这样:
我的代码CGPath配置如下:
-(CGPathRef)GetStarPath{
//Draw Object 1
{
//Create Path
CGMutablePathRef path = CGPathCreateMutable();
CGPoint pos = CGPointMake(177, 184.42); //Center Position
CGAffineTransform trans = CGAffineTransformMake(1, 0, 0, 1, pos.x, pos.y); //Transform of object
{ //SubPath 0
CGFloat d[] = {-3.0518e-05,-14.924,-3.0518e-05,-14.924,4.8492,-5.0988,4.8492,-5.0988, 4.8492,-5.0988,4.8492,-5.0988,15.692,-3.5232,15.692,-3.5232, 15.692,-3.5232,15.692,-3.5232,7.8462,4.125,7.8462,4.125, 7.8462,4.125,7.8462,4.125,9.6983,14.924,9.6983,14.924, 9.6983,14.924,9.6983,14.924,-9.1553e-05,9.8256,-9.1553e-05,9.8256, -9.1553e-05,9.8256,-9.1553e-05,9.8256,-9.6986,14.924,-9.6986,14.924, -9.6986,14.924,-9.6986,14.924,-7.8463,4.1249,-7.8463,4.1249, -7.8463,4.1249,-7.8463,4.1249,-15.692,-3.5234,-15.692,-3.5234, -15.692,-3.5234,-15.692,-3.5234,-4.8492,-5.0989,-4.8492,-5.0989, -4.8492,-5.0989,-4.8492,-5.0989,-3.0518e-05,-14.924,-3.0518e-05,-14.924 };
CGPathMoveToPoint(path, &trans, d[0], d[1]);
for(int i=0; i<10; i++)
{
CGPathAddCurveToPoint(path, &trans, d[i*8+2], d[i*8+3], d[i*8+4], d[i*8+5], d[i*8+6], d[i*8+7]);
}
CGPathCloseSubpath(path);
}
return path;
}
}
但xcode引发了一些奇怪的例外:
断言失败:(edge.LengthSquared()&gt; 1.19209290e-7F * 1.19209290e-7F),功能集,文件/SourceCache/PhysicsKit/PhysicsKit-4.6/PhysicsKit/Box2D/Collision/Shapes/b2PolygonShape.cpp, 第176行。
(异常断点在[SKPhysicsBody bodyWithPolygonFromPath:star_path];
停止)
任何帮助表示感谢。
答案 0 :(得分:2)
首先,底层的Box2d错误消息指出您的某个维度太小而无法处理。
其次,创建一个星形的身体会导致意想不到的行为 - 正如documentation中指出的那样,bodyWithPolygonFromPath:
只接受多边形的凸路径(多边形内没有超过180度的角度 - 你的明星有其中5个)。它也应该没有自交叉,并且绕组预计是逆时针的。
如果星星足够小,您可以尝试使用下面的圆形物理体(bodyWithCircleOfRadius:
)作为近似值。如果你坚持拥有一个星形物体,你可以尝试将几个物理体作为子物体添加到一个节点,以形成一个星形体:一个五边形和5个三角形连接到它。