Я пытаюсь инициализировать SKPhysicsBody
с помощью Polygon от CGPath
. Подразумевается выглядеть следующим образом: SpriteKit: ошибка polygon физики
Мой код 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()> 1.19209290e-7F * 1.19209290e-7F), функция Set, file /SourceCache/PhysicsKit/PhysicsKit-4.6/PhysicsKit/Box2D/Collision/Shapes/b2PolygonShape.cpp, строка 176.
(исключение точки останова останавливается на [SKPhysicsBody bodyWithPolygonFromPath:star_path];
)
Любая помощь оценили.
все в порядке, спасибо. Является ли это общим ограничением в физическом двигателе? – mutex36
Это, по сути, ограничения, специфичные для Box2d, который интегрирован в комплект Sprite (хотя Box2d имеет более жесткое ограничение на 8 вершин на полигон, насколько я помню). – Batalia